【发布时间】:2018-07-15 17:02:19
【问题描述】:
我想定义一个 UDF 函数来过滤 Spark 中的 DataFrame。 我想在每一列中过滤一个数组元素。
示例:过滤以'Z'开头的元素,删除数组中所有不以Z开头的元素
Original Data
+---+-------------+
| _1| _2|
+---+-------------+
|id1|[AA,BB,CC,Z12]|
|id2|[AA,ZA,CC,Z3]|
|id2|[Z2,XX,CC,A2]|
+---+-------------+
Expected result
+---+-----------+
| _1| _2 |
+---+-----------+
|id1| [Z12] |
|id2| [ZA,Z3] |
|id2| [Z2] |
+---+-----------+
Current result
+---+--------------+
| _1| _2 |
+---+--------------+
|id1| [] |
|id2| [] |
|id2| [Z2,XX,CC,A2]|
+---+--------------+
当前代码
def filterArray = udf((recs: Seq[String]) =>{
recs.filter(_.startsWith("Z"))
})
val rawData = Seq(("id1",Array("AA,BB,CC,Z12")),("id2",Array("AA,ZA,CC,Z3")),("id2",Array("AA,XX,CC,A2")))
var test = spark.createDataFrame(rawData)
test.show(4)
test = test.withColumn("_2", filterArray(test("_2")))
test.show(4)
【问题讨论】:
-
你给出的解决方案有问题吗?