我的问题与这篇文章几乎相似
我有一个数据帧,我需要过滤掉列值不是预定义数组中子字符串的行。
例如: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|
+--------+-----------+
*/