CSVファイルの内容をpysparkデータフレームにインポートする


12

.csvファイルをpysparkデータフレームにインポートするにはどうすればよいですか?Pandasでcsvファイルを読み取ってから、createDataFrameを使用してSparkデータフレームに変換しようとしましたが、まだエラーが表示されています。誰かがこれを案内してくれますか?また、xlsxファイルをインポートする方法を教えてください。csvコンテンツをpandasデータフレームにインポートしてから、sparkデータフレームに変換しようとしていますが、エラーが表示されます。

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

私のコードは:

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
エラーメッセージがある場合は、投稿する必要があります。ほとんどの場合、状況のデバッグに役立つ重要な情報が含まれています。
jagartner

csvのコンテンツをpandasデータフレームにインポートし、それをSparkデータフレームに変換しようとしていますが、「Py4JJavaError」のようなエラーが表示されますo28.applySchemaToPythonRDDの呼び出し中にエラーが発生しました。:java.lang.RuntimeException:java.lang.RuntimeException:をインスタンス化できませんorg.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
neha

そして私のコードは-> 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

1
DataScience.SEへようこそ!コメントを追加する代わりに、元の投稿を編集してください。
Emre

ファイルパスはHDFSである必要があります。そうすると、データを実行できるのはuだけです
Prakash Reddy

回答:


13

「.csvファイルをpysparkデータフレームにインポートするにはどうすればよいですか?」-これには多くの方法があります。最も簡単なのは、Databrickのspark-csvモジュールでpysparkを起動することです。これは、pysparkを

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

その後、次の手順に従います。

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

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

もう1つの方法は、テキストファイルをrddとして読み取ることです。

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

次に、データを変換して、すべてのアイテムがスキーマに適した形式(つまり、Int、String、Floatなど)になるようにします。あなたはそれから使いたいでしょう

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

リファレンス:http : //spark.apache.org/docs/1.6.1/api/python/pyspark.sql.html#pyspark.sql.Row

「また、どうすればxlsxファイルをインポートできますか?」-Excelファイルは「ビッグデータ」では使用されません。Sparkは、大きなファイルまたはデータベースで使用するためのものです。サイズが50GBのExcelファイルがある場合、問題が発生しています。Excelはそのサイズのファイルを開くことさえできません。私の経験では、20MBを超えるとExcelが停止します。


上記のRDDアプローチには問題があると思います。フィールドには改行(二重引用符で囲まれていますが)、つまりtools.ietf.org/html/rfc4180#section-2が含まれている可能性があります 。
flow2k

ツールを使用して、xlsxファイルをcsv(gnumericまたはopen office apiなど)に変換できます。その後、通常どおりデータサイエンスを実行できます
vpathak

2

以下は私にとってうまくいきました:

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

ローカルディレクトリに「temp.csv」というファイルがあります。そこから、ローカルインスタンスを使用して、次のことを行います。

>>> 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は、spark RDDに送信する未加工のテキストファイルです。データフレームを作成するには、cs1をバラバラにし、d1を作成するときに行うように、すべてのエントリを行タイプにする必要があります。最後のステップは、RDDからデータフレームを作成することです。


0

ヘッダーの処理、エスケープ文字の使用、スキーマの自動推論など、多くのことを自動的に行うDataBricksのパッケージspark-csvを使用できます。Spark 2.0以降、CSVを処理するための組み込み関数があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.