【发布时间】:2020-03-16 00:40:41
【问题描述】:
我在这里尝试实现的是向 Spark SQL map 函数发送有条件生成的列,具体取决于它们是否具有 null、0 或我可能想要的任何其他值。
以这个初始 DF 为例。
val initialDF = Seq(
("a", "b", 1),
("a", "b", null),
("a", null, 0)
).toDF("field1", "field2", "field3")
我想从最初的 DataFrame 生成另一列,这将是一个地图,就像这样。
initialDF.withColumn("thisMap", MY_FUNCTION)
我目前的处理方法基本上是在方法中使用Seq[String] flatMap Spark SQL 方法接收的键值对,就像这样。
def toMap(columns: String*): Column = {
map(
columns.flatMap(column => List(lit(column), col(column))): _*
)
}
但是,过滤变成了 Scala 的事情,而且是一团糟。
处理后我想获得的是,对于这些行中的每一行,下一个 DataFrame。
val initialDF = Seq(
("a", "b", 1, Map("field1" -> "a", "field2" -> "b", "field3" -> 1)),
("a", "b", null, Map("field1" -> "a", "field2" -> "b")),
("a", null, 0, Map("field1" -> "a"))
)
.toDF("field1", "field2", "field3", "thisMap")
我想知道这是否可以使用Column API 来实现,而.isNull 或.equalTo 更直观?
【问题讨论】:
标签: scala apache-spark apache-spark-sql