2016-12-07 22 views
0

Spark 2.0を使用してRDDにcsvファイルを読み込みたいとします。私はSpark 2.0を使用してRDDにcsvを読み取る

df = session.read.csv("myCSV.csv", header=True,) 

を使用してデータフレームの中にそれを読むことができると私はテキストファイルとしてそれをロードし、その後

import csv 
rdd = context.textFile("myCSV.csv") 
header = rdd.first().replace('"','').split(',') 
rdd = (rdd.mapPartitionsWithIndex(lambda idx, itr: itr.drop(1) if idx == 0 else itr) 
     .mapPartitions(lambda x: csv.reader(x)) 
    ) 

を使用して、それを処理することができますcsvファイルに組み込まれたリーダー(火花防止型を使用する方法はありますcsv)をデータフレームからcsvに変換せずにRDDにまっすぐに進めることができますか?あるいは、上記のRDD方法は、組み込みのリーダーが何か似たようなことをするので十分ですか?

:1)再びデータフレームを読み込んでRDDに変換したくないです。これにより、構造全体がただちに削除されます。無意味に思える。 2)はい、私は上記(DF→RDD変換に対して)時間を取ることができますが、それは私のRDD読み取りソリューションが変換より優れているかどうかだけを教えてくれます。 csvからRDDに組み込まれたメソッドは、上記のコードよりも最適化される可能性が最も高いでしょう。

答えて

1

あなたは、私が変換することなく、元の質問にも言ったように、以下の

rdd = session.read.csv("myCSV.csv", header=True).rdd 
+1

のように.rddを使用してRDDへのデータフレームに変換することができます。 :)いくつかの構造を構築してすぐにそれをドロップするばかげているようだ。 – Sal

+0

ああ、私はそれを逃した。まあ、DFからRDDに変換するのに計算上何も費用はかかりませんが、構造を構築するいくつかのリソースを無駄にしているかもしれません。 CSVが最初の行で定義されているため(たとえばファイル全体をスキャンする必要がないなど)、構造を構築する際のオーバーヘッドは非常に小さいはずです。彼らは確かにいくつかのタイミングテストを行うために知っている唯一の方法です。 – David

+0

私はタイミングテストを行うことができましたが、組み込みのメソッドが存在する場合は、上記の私のソリューションよりも最適化されていると確信しています。したがって、上記のソリューションが変換するよりもうまく動作するかどうかだけでタイミングがわかります。 – Sal

関連する問題