Scala:根据预先定义的Array Spark 1.6中的列值过滤DF行



我的问题与这篇文章几乎相似

我有一个数据帧,我需要过滤掉列值不是预定义数组中子字符串的行。

例如:List=["苹果","葡萄","甜瓜"]

+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      11|      mango|
|      12| watermelon|
|      15|  muskmelon|
|      22|    berries|
+--------+-----------+

在使用数组进行过滤后,我的df应该看起来像:

+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      12| watermelon|
|      15|  muskmelon|
+--------+-----------+

具有列值的行";芒果";以及";浆果";应该过滤掉,因为预定义列表中不存在子字符串。

火花1.6中有什么建议或想法吗?

使用.rlike函数,从List中用|生成字符串。

Example:

df.show()
/*
+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      11|      mango|
|      12| watermelon|
|      15|  muskmelon|
|      22|    berries|
+--------+-----------+
*/
import org.apache.spark.sql.functions._
val list=Seq("apple" , "grapes" , "melon").mkString("|")
//list: String = apple|grapes|melon
df.filter(col("fruit").rlike(list)).show()
/*
+--------+-----------+
|quantity|      fruit|
+--------+-----------+
|      12|      apple|
|      24|green apple|
|       6|     grapes|
|      12| watermelon|
|      15|  muskmelon|
+--------+-----------+
*/

最新更新