2017-10-06 177 views
0

我有一個json和csv文件,其內容相同,內容爲1.8m亞馬遜的評論。處理json比csv多核多慢

我正在執行2個操作:DataFrame行數和生成文本數據的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

我期望處理JSON和CSV具有相同數據所需的時間將是或多或少相等。這是正常的,如果是這樣,是否有一種方法來處理json的速度與csv中的spark相同?

+1

你的問題是? –

+0

對不起,添加了這個問題。 –

回答

0

不,它永遠不會是一樣的速度。

首先,Json是大數據最糟糕的格式。我們用它來說,如果數據很大,爲什麼不用json來做大。

Spark用於創建數據的列式抽象。所以閱讀CSV要快得多。由於該文件處理簡單且體積較小。

看到一個CSV的數據是這樣的:

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

JSON看起來是這樣的:

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

所以你可以看到JSON有更多的數據。當Spark需要解析數據時,主機需要在解析之前通過其他節點對這些數據進行洗牌。所以有更多的數據需要洗牌,這會增加洗牌的時間。 而您的csv比JSON轉換爲DS快得多。 JSON需要轉換爲一個Map對象,然後轉換爲DS。

這些是原因。