Yo tengo un gran tabla de datos de series de tiempo que tienen estas columnas:

  • Timestamp
  • LicensePlate
  • UberRide#
  • Velocidad

Cada colección de LicensePlate/UberRide los datos deben ser procesados teniendo en cuenta todo el conjunto de datos. En otras palabras, me no necesidad de proceso de los datos de fila por fila, pero todas las filas agrupadas por (LicensePlate/UberRide) juntos.

Estoy planeando utilizar la chispa con la dataframe de la api, pero estoy confundido sobre cómo puedo realizar un cálculo personalizado de más de chispa agrupados dataframe.

Lo que necesito hacer es:

  1. Obtener todos los datos
  2. Grupo por columnas
  3. Foreach chispa dataframe grupo se aplican a f(x). Devolver un objeto personalizado foreach grupo
  4. Obtener los resultados mediante la aplicación de g(x) y devuelve un único objeto personalizado

¿Cómo puedo hacer los pasos 3 y 4? Cualquier insinuación sobre que la chispa de la API (dataframe, conjunto de datos, rdd, tal vez pandas…) debo usar?

El flujo de trabajo completo se puede ver a continuación:

Aplicar una función personalizada para una chispa dataframe grupo

  • Los Pandas no son parte de la Chispa, puede utilizar DataFrame pero te tenemos que hacerlo en Scala y añadir Python contenedor, Ddr debería funcionar bien.
  • No puedo usar Chispa directamente? Estoy usando Chispa 1.6.2
  • Si te refieres a PySpark entonces como he dicho – Ddr debería funcionar bien.
  • Voy a investigar exactamente cómo puedo utilizar ddr antes de pedir preguntas de novato… 🙂
  • fuiste capaz de lograr esto con PySpark? Estoy tratando de hacer algo similar y estoy atascado. Me encantaría escuchar sus pensamientos sobre esto.
  • df.rdd.keyBy(lambda x: (x[‘clave1’], x[‘clave2’])) \ .groupByKey() \ .map(lambda groupped_data: my_map_fn(groupped_data))
  • bueno, esto es impresionante. Voy a darle un tiro. gracias 😊

InformationsquelleAutor guilhermecgs | 2016-09-20

2 Comentarios

  1. 8
    • Mientras Spark ofrece algunas maneras de integrar con los Pandas no hacer Pandas distribuido. Hagas lo que hagas, con Pandas en la Chispa es simplemente local (ya sea conductor o del albacea cuando se utiliza dentro de las transformaciones de operación).

      Si usted está buscando un sistema distribuido con Pindas-como una API que usted debe echar un vistazo a dask.

    • Puede definir el Usuario Define las funciones de Agregado o Agregadores a proceso agrupados Datasets pero esta parte de la API es directamente accesible sólo en la Scala. No es difícil escribir un wrapper) de Python cuando se crea uno.
    • RDD API proporciona una serie de funciones que pueden ser utilizadas para realizar operaciones en los grupos de comenzar con bajo nivel de repartition /repartitionAndSortWithinPartitions y terminando con un número de *byKey métodos (combineByKey, groupByKey, reduceByKey, etc.).

      Que uno es aplicable en su caso depende de las propiedades de la función que desea aplicar (es asociativa y conmutativa, puede que funcione en los arroyos, hace esperar orden específico).

      La mayoría de los generales, pero ineficiente enfoque puede resumirse de la siguiente manera:

      h(rdd.keyBy(f).groupByKey().mapValues(g).collect())

      donde f mapas de valor para key, g corresponde a cada grupo de agregación y h es una combinación final. La mayoría del tiempo, usted puede hacer mucho mejor que por lo que sólo debe utilizarse como último recurso.

    • Relativamente compleja que la lógica puede ser expresado mediante DataFrames /Spark SQL y las funciones de la ventana.

    • Ver también La aplicación de Udf en GroupedData en PySpark (con el funcionamiento de python ejemplo)

  2. 6

    Lo que usted está buscando no existe ya que la Chispa 2.3: Pandas vectorizados Udf. Permite agrupar un DataFrame y aplicar transformaciones personalizadas con los pandas, que se distribuyen en cada grupo:

    df.groupBy("groupColumn").apply(myCustomPandasTransformation)

    Es muy fácil de usar así que me limitaré a poner un enlace a Databricks la presentación de los pandas UDF.

    Sin embargo, no sé tal manera práctica de hacer agrupan las transformaciones en la Scala todavía, así que cualquier consejo adicional es bienvenida.

    EDITAR: en la Scala, usted puede conseguir la misma cosa desde versiones anteriores de Chispa, usando el conjunto de datos del groupByKey + mapGroups/flatMapGroups.

Dejar respuesta

Please enter your comment!
Please enter your name here