首页 > 解决方案 > Scala:根据预定义数组 Spark 1.6 中存在的列值过滤 DF 行

问题描述

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

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

例如: List = ["apple" , "grapes" , "melon"]

+--------+-----------+
|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中的任何建议或想法?

标签: scaladataframeapache-sparkpysparkuser-defined-functions

解决方案


通过使用from List.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|
+--------+-----------+
*/

推荐阅读