2017-10-06 123 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。

这些是原因。