我有一个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()
附表表示使用不同数量的核执行这些操作所花费的时间(以秒为单位)。
我希望用相同数据处理json和csv所需的时间或多或少相等。这是正常的,如果是这样,有没有办法以与火花中的csv相同的速度处理json?
答案 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。
这就是原因。