Importez le contenu du fichier csv dans des cadres de données pyspark

12

Comment importer un fichier .csv dans des cadres de données pyspark? J'ai même essayé de lire le fichier csv dans Pandas, puis de le convertir en un cadre de données spark à l'aide de createDataFrame, mais il affiche toujours une erreur. Quelqu'un peut-il me guider à travers cela? Aussi, dites-moi comment importer un fichier xlsx? J'essaie d'importer du contenu csv dans des cadres de données pandas, puis de le convertir en trames de données spark, mais cela montre l'erreur:

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

Mon code est:

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) 
neha
la source
1
Si vous avez un message d'erreur, vous devez le publier; il contient très probablement des informations importantes pour aider à déboguer la situation.
jagartner
j'essaie d'importer le contenu csv dans des cadres de données pandas, puis de le convertir en cadres de données spark .... mais il affiche une erreur comme "Py4JJavaError" Une erreur s'est produite lors de l'appel de o28.applySchemaToPythonRDD. : java.lang.RuntimeException: java.lang.RuntimeException: impossible d'instancier org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha
et mon code était -> de pyspark import SparkContext de pyspark.sql import SQLContext import pandas comme pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> Erreur
neha
1
Bienvenue sur DataScience.SE! Veuillez modifier votre message d'origine au lieu d'ajouter des commentaires.
Emre
le chemin du fichier doit être en HDFS alors seulement u peut exécuter les données
Prakash Reddy

Réponses:

13

"Comment puis-je importer un fichier .csv dans des trames de données pyspark?" - il existe de nombreuses façons de procéder; le plus simple serait de démarrer pyspark avec le module spark-csv de Databrick. Vous pouvez le faire en démarrant pyspark avec

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

alors vous pouvez suivre les étapes suivantes:

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

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

L'autre méthode serait de lire le fichier texte comme un rdd en utilisant

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

Transformez ensuite vos données afin que chaque élément soit au format correct pour le schéma (c'est-à-dire Ints, Strings, Floats, etc.). Vous voudrez ensuite utiliser

>>> 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)]

Référence: http://spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql.Row

"Aussi, dites-moi comment importer un fichier xlsx?" - Les fichiers Excel ne sont pas utilisés dans les "Big Data"; Spark est destiné à être utilisé avec des fichiers ou des bases de données volumineux. Si vous avez un fichier Excel de 50 Go, vous vous trompez. Excel ne pourrait même pas ouvrir un fichier de cette taille; d'après mon expérience, tout ce qui dépasse 20 Mo et Excel meurt.

Jon
la source
Je pense qu'il peut y avoir un problème avec l'approche RDD ci-dessus: les champs peuvent contenir des retours à la ligne (quoique entourés de guillemets doubles), à savoir, tools.ietf.org/html/rfc4180#section-2 .
flow2k
vous pouvez utiliser des outils pour convertir le fichier xlsx en csv (des choses comme gnumeric ou open office apis). alors vous pouvez faire la science des données comme d'habitude
vpathak
2

Les suivants ont bien fonctionné pour moi:

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)
Saurabh Agrawal
la source
1

J'ai dans mon répertoire local un fichier 'temp.csv'. De là, en utilisant une instance locale, je fais ce qui suit:

>>> 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)]

Donc d0 est le fichier texte brut que nous envoyons à un RDD spark. Pour que vous puissiez créer un bloc de données, vous voulez séparer le csv et faire de chaque entrée un type de ligne, comme je le fais lors de la création de d1. La dernière étape consiste à créer la trame de données à partir du RDD.

jagartner
la source
0

Vous pouvez utiliser le package spark-csv de DataBricks qui fait beaucoup de choses pour vous automatiquement, comme prendre soin de l'en-tête, utiliser des caractères d'échappement, inférer automatiquement un schéma, etc. À partir de Spark 2.0, il existe une fonction intégrée pour traiter les CSV.

Jan van der Vegt
la source