Estoy usando pyspark a leer un parquet de archivo como a continuación:

my_df = sqlContext.read.parquet('hdfs://myPath/myDB.db/myTable/**')

Entonces cuando hago my_df.take(5), se mostrará [Row(...)], en lugar de un formato de tabla como cuando hacemos uso de los pandas del marco de datos.

Es posible mostrar el marco de datos en un formato de tabla como pandas marco de datos? Gracias!

  • intente esto: my_df.take(5).show()
  • Tengo error: <ipython-de entrada-14-d14c0ee9b9fe> en <módulo>() —-> my_df.tomar(5).show() AttributeError: ‘lista’ el objeto no tiene ningún atributo ‘show’
  • debe ser my_df.show().take(5)
  • cómo es .tomar(5).show (), diferente de la .mostrar(5)? Es más rápido?
InformationsquelleAutor Edamame | 2016-08-21

4 Comentarios

  1. 32

    La mostrar método hace lo que usted está buscando.

    Por ejemplo, dada la siguiente dataframe de 3 filas, puedo imprimir sólo las dos primeras filas como esta:

    df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("baz", 3)], ('k', 'v'))
    df.show(n=2)

    que los rendimientos:

    +---+---+
    |  k|  v|
    +---+---+
    |foo|  1|
    |bar|  2|
    +---+---+
    only showing top 2 rows
    • Es v primitivo vs pandas: por ejemplo, para el envasado de no permitir el desplazamiento horizontal
  2. 4

    Como lo menciona @Brent en el comentario de @maxymoo la respuesta, usted puede tratar de

    df.limit(10).toPandas()

    para obtener una bonita mesa en Jupyter. Pero esto puede tomar algún tiempo para que se ejecute si usted no está de almacenamiento en caché de la chispa dataframe. También, .limit() no mantener el orden original de chispa dataframe.

  3. 3

    Sí: llame a la toPandas método en el dataframe y obtendrá un real pandas dataframe !

    • Traté de hacer: my_df.toPandas().cabeza(). Pero tengo el error: Py4JJavaError: se ha producido Un error al llamar z:org.apache.spark.api.python.PythonRDD.collectAndServe. : org.apache.chispa.SparkException: Trabajo abortado debido a la falla de fase: la Tarea 301 en la etapa 2.0 error 1 veces, la más reciente fracaso: la pérdida de la tarea 301.0 en la etapa 2.0 (TID 1871, localhost): java.lang.OutOfMemoryError: Java heap space
    • Esto es peligroso ya que esto va a recoger toda la estructura de datos en un único nodo.
    • Cabe destacar que este rápidamente la tapa de la memoria, en el tradicional Chispa RDD escenarios.
    • Debe ser utilizado con un límite, como este en el df.límite(10).toPandas() para proteger de la OOMs
    • El uso de .toPandas(), recibo el siguiente error: se ha producido Un error al llamar a o86.obtener. : java.util.NoSuchElementException: spark.sql.de la ejecución.los pandas.respectSessionTimeZone ¿Cómo puedo lidiar con esto?
    • Debe haber un método como fromPandas.

  4. 0

    Supongamos que tenemos el siguiente Chispa DataFrame:

    df = sqlContext.createDataFrame([(1, "Mark", "Brown"), (2, "Tom", "Anderson"), (3, "Joshua", "Peterson")], ('id', 'firstName', 'lastName'))

    Normalmente hay tres maneras diferentes que usted puede utilizar para imprimir el contenido de la dataframe:

    De Impresión Chispa DataFrame

    La forma más común es el uso de la mostrar() función:

    >>> df.show()
    +---+---------+--------+
    | id|firstName|lastName|
    +---+---------+--------+
    |  1|     Mark|   Brown|
    |  2|      Tom|Anderson|
    |  3|   Joshua|Peterson|
    +---+---------+--------+

    De impresión Chispa DataFrame verticalmente

    Decir que usted tiene un número bastante grande de columnas y su dataframe no cabe en la pantalla. Puede imprimir las filas en vertical – Por ejemplo, el siguiente comando para imprimir la parte superior de las dos filas, de forma vertical, sin ningún tipo de truncamiento.

    >>> df.show(n=2, truncate=False, vertical=True)
    -RECORD 0-------------
     id        | 1        
     firstName | Mark     
     lastName  | Brown    
    -RECORD 1-------------
     id        | 2        
     firstName | Tom      
     lastName  | Anderson 
    only showing top 2 rows

    Convertir a los Pandas y de impresión de los Pandas DataFrame

    Alternativamente, usted puede convertir su Chispa DataFrame en un Pandas DataFrame utilizando .toPandas() y finalmente print() ella. Tenga en cuenta que esto no es recomendable, cuando usted tiene que tratar con bastante grande dataframes, como los Pandas necesidades de la carga de todos los datos en la memoria.

    >>> print(df.toPandas())
       id firstName  lastName
    0   1      Mark     Brown
    1   2       Tom  Anderson
    2   3    Joshua  Peterson

Dejar respuesta

Please enter your comment!
Please enter your name here