Mar*_*ace 4 scala filter apache-spark spark-dataframe
我正在使用Spark 1.4.0,这是我到目前为止所拥有的:
data.filter($"myColumn".in(lit("A"), lit("B"), lit("C"), ...))
Run Code Online (Sandbox Code Playgroud)
lit函数将文字转换为列.
理想情况下,我会把我的A,B,C放在一个Set中并像这样检查:
val validValues = Set("A", "B", "C", ...)
data.filter($"myColumn".in(validValues))
Run Code Online (Sandbox Code Playgroud)
什么是正确的语法?有没有其他简洁的解决方案?
Paw*_*nko 11
Spark 1.4或更早版本:
val validValues = Set("A", "B", "C").map(lit(_))
data.filter($"myColumn".in(validValues.toSeq: _*))
Run Code Online (Sandbox Code Playgroud)
Spark 1.5或更新版本:
val validValues = Set("A", "B", "C")
data.filter($"myColumn".isin(validValues.toSeq: _*))
Run Code Online (Sandbox Code Playgroud)
一旦此PR合并到Spark 2.4中,您就可以
val profileDF = Seq(
Some(1), Some(2), Some(3), Some(4),
Some(5), Some(6), Some(7), None
).toDF("profileID")
val validUsers: Set[Any] = Set(6, 7.toShort, 8L, "3")
val result = profileDF.withColumn("isValid", $"profileID".isinSet(validUsers))
result.show(10)
"""
+---------+-------+
|profileID|isValid|
+---------+-------+
| 1| false|
| 2| false|
| 3| true|
| 4| false|
| 5| false|
| 6| true|
| 7| true|
| null| null|
+---------+-------+
""".stripMargin
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6177 次 |
| 最近记录: |