gpt4 book ai didi

apache-spark - Spark 数据集过滤器性能

转载 作者:行者123 更新时间:2023-12-03 01:20:21 24 4
gpt4 key购买 nike

我一直在尝试不同的方法来过滤类型化数据集。事实证明,性能可能会有很大不同。

该数据集是基于 1.6 GB 行数据(33 列、4226047 行)创建的。 DataSet 通过加载 csv 数据创建并映射到案例类。

val df = spark.read.csv(csvFile).as[FireIncident]

UnitId = 'B02' 上的过滤器应返回 47980 行。我测试了以下三种方式:1) 使用类型列(本地主机上约 500 毫秒)

df.where($"UnitID" === "B02").count()

2)使用临时表和sql查询(〜与选项1相同)

df.createOrReplaceTempView("FireIncidentsSF")
spark.sql("SELECT * FROM FireIncidentsSF WHERE UnitID='B02'").count()

3) 使用强类型类字段(14,987ms,即慢 30 倍)

df.filter(_.UnitID.orNull == "B02").count()

我用python API再次测试了一遍,对于相同的数据集,计时为17,046毫秒,与scala API选项3的性能相当。

df.filter(df['UnitID'] == 'B02').count()

有人可以阐明 3) 和 python API 的执行方式与前两个选项的不同吗?

最佳答案

这是因为步骤 3 here .

在前两个中,spark 不需要反序列化整个 Java/Scala 对象 - 它只查看一列并继续前进。

在第三个中,由于您使用的是 lambda 函数,spark 无法判断您只需要一个字段,因此它会从每一行的内存中提取所有 33 个字段,以便您可以检查该一个字段.

我不知道为什么第四个这么慢。看起来它的工作方式与第一个相同。

关于apache-spark - Spark 数据集过滤器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com