处理json比具有多个核心的csv慢得多

时间:2017-10-06 14:08:47

标签: apache-spark pyspark

我有一个json和csv文件,内容相同,只有1.8米亚马逊评论。

我正在执行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所需的时间或多或少相等。这是正常的,如果是这样,有没有办法以与火花中的csv相同的速度处理json?

1 个答案:

答案 0 :(得分:0)

不,它永远不会是相同的速度。

首先,Json是大数据最差的格式。我们用来说,如果数据很大,为什么不使用json更大。

Spark用于创建数据的Columnar抽象。因此,阅读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转换为DS比JSON快得多。 JSON需要转换为一个Map对象,然后转换为DS。

这就是原因。