Importe el contenido del archivo csv en marcos de datos pyspark


12

¿Cómo puedo importar un archivo .csv en marcos de datos pyspark? Incluso intenté leer el archivo csv en Pandas y luego convertirlo en un marco de datos de chispa usando createDataFrame, pero todavía muestra algún error. ¿Alguien puede guiarme a través de esto? Además, por favor dígame ¿cómo puedo importar un archivo xlsx? Estoy tratando de importar contenido csv en marcos de datos de pandas y luego convertirlo en marcos de datos de chispa, pero muestra el error:

"Py4JJavaError" An error occurred while calling o28.applySchemaToPythonRDD. : java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 

Mi código es:

from pyspark import SparkContext 
from pyspark.sql import SQLContext 
import pandas as pd 
sqlc=SQLContext(sc) 
df=pd.read_csv(r'D:\BestBuy\train.csv') 
sdf=sqlc.createDataFrame(df) 

1
Si tiene un mensaje de error, debe publicarlo; Lo más probable es que tenga información importante para ayudar a depurar la situación.
jagartner

Estoy tratando de importar contenido csv en marcos de datos de pandas y luego convertirlo en marcos de datos de chispa ... pero muestra un error similar a "Py4JJavaError" Se produjo un error al llamar a o28.applySchemaToPythonRDD. : java.lang.RuntimeException: java.lang.RuntimeException: No se puede crear una instancia de org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha

y mi código era -> de pyspark import SparkContext de pyspark.sql import SQLContext import pandas como pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> Error
neha

1
Bienvenido a DataScience.SE! Edite su publicación original en lugar de agregar comentarios.
Emre

la ruta del archivo debe estar en HDFS, entonces solo usted puede ejecutar los datos
Prakash Reddy

Respuestas:


13

"¿Cómo puedo importar un archivo .csv en marcos de datos pyspark?" -- Hay muchas maneras de hacer esto; lo más sencillo sería iniciar pyspark con el módulo spark-csv de Databrick. Puede hacerlo iniciando pyspark con

pyspark --packages com.databricks:spark-csv_2.10:1.4.0

entonces puedes seguir los siguientes pasos:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('cars.csv')

El otro método sería leer en el archivo de texto como un rdd usando

myrdd = sc.textFile("yourfile.csv").map(lambda line: line.split(","))

Luego, transforme sus datos para que cada elemento tenga el formato correcto para el esquema (es decir, Ints, Strings, Floats, etc.). Entonces querrás usar

>>> from pyspark.sql import Row
>>> Person = Row('name', 'age')
>>> person = rdd.map(lambda r: Person(*r))
>>> df2 = sqlContext.createDataFrame(person)
>>> df2.collect()
[Row(name=u'Alice', age=1)]
>>> from pyspark.sql.types import *
>>> schema = StructType([
...    StructField("name", StringType(), True),
...    StructField("age", IntegerType(), True)])
>>> df3 = sqlContext.createDataFrame(rdd, schema)
>>> df3.collect()
[Row(name=u'Alice', age=1)]

Referencia: http://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql.Row

"Además, por favor dígame ¿cómo puedo importar el archivo xlsx?" - Los archivos de Excel no se usan en "Big Data"; Spark está destinado a ser utilizado con grandes archivos o bases de datos. Si tiene un archivo Excel que tiene un tamaño de 50 GB, está haciendo las cosas mal. Excel ni siquiera podría abrir un archivo de ese tamaño; desde mi experiencia, cualquier cosa por encima de 20 MB y Excel muere.


Creo que puede haber un problema con el enfoque RDD anterior: los campos pueden contener nuevas líneas (aunque están entre comillas dobles), a saber, tools.ietf.org/html/rfc4180#section-2 .
flow2k

puede usar herramientas para convertir archivos xlsx a csv (cosas como gnumeric o open office apis). entonces puedes hacer la ciencia de datos de manera normal
vpathak

2

Lo siguiente funcionó bien para mí:

from pyspark.sql.types import *
schema = StructType([StructField("name", StringType(), True),StructField("age", StringType(), True)]
pd_df = pd.read_csv("<inputcsvfile>")
sp_df = spark.createDataFrame(pd_df, schema=schema)

1

Tengo en mi directorio local un archivo 'temp.csv'. A partir de ahí, usando una instancia local, hago lo siguiente:

>>> from pyspark import SQLContext
>>> from pyspark.sql import Row
>>> sql_c = SQLContext(sc)
>>> d0 = sc.textFile('./temp.csv')
>>> d0.collect()
[u'a,1,.2390', u'b,2,.4390', u'c,3,.2323']
>>> d1 = d0.map(lambda x: x.split(',')).map(lambda x: Row(label = x[0], number = int(x[1]), value = float(x[2])))
>>> d1.take(1)
[Row(label=u'a', number=1, value=0.239)]
>>> df = sql_c.createDataFrame(d1)
>>> df_cut = df[df.number>1]
>>> df_cut.select('label', 'value').collect()
[Row(label=u'b', value=0.439), Row(label=u'c', value=0.2323)]

Entonces d0 es el archivo de texto sin formato que enviamos a una chispa RDD. Para que pueda crear un marco de datos, desea separar el csv y hacer que cada entrada sea un tipo de fila, como lo hago al crear d1. El último paso es hacer el marco de datos desde el RDD.


0

Puede usar el paquete spark-csv de DataBricks que hace muchas cosas por usted automáticamente, como cuidar el encabezado, usar caracteres de escape, esquema automático que infiere etc. A partir de Spark 2.0, hay una función incorporada para tratar con CSV.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.