Importieren Sie den Inhalt der CSV-Datei in pyspark-Datenrahmen


12

Wie kann ich eine CSV-Datei in pyspark-Datenrahmen importieren? Ich habe sogar versucht, eine CSV-Datei in Pandas zu lesen und sie dann mit createDataFrame in einen Spark-Datenrahmen zu konvertieren, aber es wird immer noch ein Fehler angezeigt. Kann mich jemand durch das führen? Bitte sagen Sie mir auch, wie ich eine XLSX-Datei importieren kann. Ich versuche, CSV-Inhalte in Pandas-Datenrahmen zu importieren und sie dann in Spark-Datenrahmen zu konvertieren, aber es wird der Fehler angezeigt:

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

Mein Code lautet:

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
Wenn Sie eine Fehlermeldung haben, sollten Sie diese veröffentlichen. Es enthält höchstwahrscheinlich wichtige Informationen zum Debuggen der Situation.
Jagartner

Ich versuche, CSV-Inhalte in Pandas-Datenrahmen zu importieren und sie dann in Spark-Datenrahmen zu konvertieren. Es wird jedoch ein Fehler wie "Py4JJavaError" angezeigt. Beim Aufrufen von o28.applySchemaToPythonRDD ist ein Fehler aufgetreten. : java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient kann nicht instanziiert werden
neha

und mein Code war -> aus pyspark importiere SparkContext aus pyspark.sql importiere SQLContext importiere Pandas als pd sqlc = SQLContext (sc) df = pd.read_csv (r'D: \ BestBuy \ train.csv ') sdf = sqlc.createDataFrame (df) ----> Fehler
neha

1
Willkommen bei DataScience.SE! Bitte bearbeiten Sie Ihren ursprünglichen Beitrag, anstatt Kommentare hinzuzufügen.
Emre

Dateipfad muss in HDFS sein, dann können nur Sie die Daten ausführen
Prakash Reddy

Antworten:


13

"Wie kann ich eine CSV-Datei in pyspark-Datenrahmen importieren?" - Es gibt viele Möglichkeiten, dies zu tun. Am einfachsten wäre es, pyspark mit dem Spark-CSV-Modul von Databrick zu starten. Sie können dies tun, indem Sie pyspark mit starten

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

Dann können Sie die folgenden Schritte ausführen:

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

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

Die andere Methode wäre, die Textdatei als rdd mit einzulesen

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

Transformieren Sie dann Ihre Daten so, dass jedes Element das richtige Format für das Schema hat (z. B. Ints, Strings, Floats usw.). Sie möchten dann verwenden

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

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

"Bitte sagen Sie mir auch, wie ich eine XLSX-Datei importieren kann." - Excel-Dateien werden in "Big Data" nicht verwendet. Spark soll mit großen Dateien oder Datenbanken verwendet werden. Wenn Sie eine Excel-Datei mit einer Größe von 50 GB haben, machen Sie etwas falsch. Excel wäre nicht einmal in der Lage, eine Datei dieser Größe zu öffnen. Nach meiner Erfahrung stirbt alles über 20 MB und Excel.


Ich denke, es kann ein Problem mit dem obigen RDD-Ansatz geben: Felder können Zeilenumbrüche enthalten (obwohl sie in doppelte Anführungszeichen gesetzt sind), nämlich tools.ietf.org/html/rfc4180#section-2 .
flow2k

Sie können Tools verwenden, um XLSX-Dateien in CSV zu konvertieren (z. B. gnumerische oder Open Office-APIs). dann können Sie die Datenwissenschaft wie
gewohnt durchführen

2

Folgendes hat bei mir gut funktioniert:

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

Ich habe in meinem lokalen Verzeichnis eine Datei 'temp.csv'. Von dort aus mache ich mit einer lokalen Instanz Folgendes:

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

D0 ist also die Rohtextdatei, die wir an eine Spark-RDD senden. Damit Sie einen Datenrahmen erstellen können, möchten Sie die CSV-Datei aufteilen und jeden Eintrag wie beim Erstellen von d1 als Zeilentyp festlegen. Der letzte Schritt besteht darin, den Datenrahmen aus dem RDD zu erstellen.


0

Sie können das Paket spark-csv von DataBricks verwenden, das viele Dinge automatisch für Sie erledigt, z. B. die Pflege des Headers, die Verwendung von Escape-Zeichen, das automatische Ableiten von Schemas usw. Ab Spark 2.0 gibt es eine eingebaute Funktion für den Umgang mit CSVs.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.