2017-10-06 11 views
0

1.8mのアマゾンレビューと同じ内容のjsonとcsvファイルがあります。複数のコアを持つcsvよりも処理速度がかなり遅い

私は2つの操作を行っています:データフレームの行数とテキストデータのTFIDFの生成。私は1,2,4,8コアでこの操作を試みました。コアの増加に伴い、csvベースのDataFrameの処理速度は比例して増加していますが、jsonベースのものはそのままです。

行数例:

data = spark.read.format("csv").option("header", "true").load("path/amazon_half.csv") 
%timeit -n 10 data.count() 
djs = spark.read.format("json").option("header", "true").load("path/amazon_half.json") 
%timeit -n 10 djs.count() 

アタッチテーブルは、それがコアの異なる数のこれらの操作を実行するために秒単位で時間を表しています。

enter image description here

Iは、同じデータをJSONやCSVファイルを処理するのに要する時間は、多かれ少なかれ等しいであろうと予想されます。これは正常ですか?あれば、sparkのcsvと同じ速度でjsonを処理する方法はありますか?

+1

あなたの質問は? –

+0

申し訳ありません、質問を追加しました。 –

答えて

0

いいえ、それは決して同じ速度ではありません。

最初に、JsonはBig Dataの最悪のフォーマットです。私たちは、もしデータが大きければjsonをもっと大きくするべきではないと言っています。

データの円柱抽象化を作成するためにスパークを使用します。だから、CSVを読む方がはるかに高速です。このファイルは処理が簡単で、サイズも小さいためです。

CSVのデータを参照してくださいは、次のようになります。

{key: "a", value: 2}, 
{key: "b", value: 3}, 
{key: "c", value: 44} 

だから、あなたはJSONはより多くのデータを持って見ることができます:

key, value 
a, 2 
b, 3 
c, 44 

JSONは次のようになります。また、マスターが解析する前に他のノードを介してこのデータをシャッフルする必要があるデータを解析する必要がある場合は起動します。シャッフルする時間が増えるほど、シャッフルするデータが増えます。 あなたのCSVはJSONよりもDSに変換する方がはるかに高速です。 JSONは1つのMapオブジェクトに変換し、その後にDSに変換する必要があります。

これが原因です。