在 Spark Scala 中向数据集添加过滤条件
Posted
技术标签:
【中文标题】在 Spark Scala 中向数据集添加过滤条件【英文标题】:Add filter condition to dataset in Spark Scala 【发布时间】:2022-01-22 15:55:09 【问题描述】:在我的数据集中有 12 个不同的列,例如 age
、heartdisease
、maximum heart rate
。
所以,我想将数据集重新排列到不同的年龄范围,例如0-10
、10-20
、30-40
...
对于每个age
组,它们的最大心率因公式220-age
而不同。比如取年龄组10-20
,取平均年龄15岁,220-15=205
是最大心率,所以我想要10-20
年龄组中心率高于这个限制的人数。
下面是我用来创建年龄组的代码。
val HR_DF = heartDF.filter("HeartDisease == 1")
.withColumn("Range", $"Age" - ($"Age" % 10))
.withColumn("Range", concat($"Range", lit(" - "), $"Range" + 10))
.groupBy($"Range")
.count()
.sort("Range")
【问题讨论】:
请以文本而非图像的形式提供数据样本。 Why not upload images of code/errors when asking a question? 【参考方案1】:使用spark的when().otherwise()
函数怎么样?
您可以制作每个Range
的最大心率的新火花柱。
以下代码是 pyspark 示例(python)。
import pyspark.sql.functions as F
HR_DF.filter(HR_DF['restingBP'] > F.when(HR_DF['range'] == '10-20', 220 - 15).when(HR_DF['range'] == '20-30', 220 - 25)).show()
也许这是相同的 scala 代码。
HR_DF.filter(HR_DF("restingBP") > when(HR_DF("range") === "10-20", 220 - 15).when(HR_DF("range") === "20-30", 220 - 25)).show()
【讨论】:
以上是关于在 Spark Scala 中向数据集添加过滤条件的主要内容,如果未能解决你的问题,请参考以下文章
scala - Spark:如何在 groupedData 中获取带有条件的结果集
如何在 Scala Spark 中使用具有许多条件的“.withColumn”为数据集创建新列
在 Spark Scala 中将一行从一个数据集添加到另一个数据集