如何解决Scala:根据预定义的Array Spark 1.6中存在的列值过滤DF行
我的问题几乎类似于this post
我有一个数据框,我需要过滤出列值不是预定义数组中的子字符串的行。
例如:列表= [“苹果”,“葡萄”,“瓜”]
+--------+-----------+
|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|
+--------+-----------+
具有列值“ mango”和“ berries”的行应被过滤掉,因为子字符串在预定义列表中不存在。
spark 1.6中有任何建议或想法吗?
解决方法
使用 .rlike
函数,通过列表中的|
来创建字符串。
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|
+--------+-----------+
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。