【发布时间】:2019-07-12 12:48:56
【问题描述】:
我试图弄清楚是否有一个函数可以检查 spark DataFrame 的列是否包含列表中的任何值:
# define a dataframe
rdd = sc.parallelize([(0,100), (0,1), (0,2), (1,2), (1,10), (1,20), (3,18), (3,18), (3,18)])
df = sqlContext.createDataFrame(rdd, ["id", "score"])
# define a list of scores
l = [1]
# filter out records by scores by list l
records = df.filter(~df.score.contains(l))
# expected: (0,100), (0,1), (1,10), (3,18)
运行此代码时遇到问题:
java.lang.RuntimeException: Unsupported literal type class java.util.ArrayList [1]
有没有办法做到这一点,还是我们必须遍历列表才能传递包含?
【问题讨论】:
-
你能解释一下这背后的逻辑是什么吗?为什么
(0, 1)在结果中,而(0,2)在结果中? -
@Psidom .. 我试图找出分数是否包含值 1 所以 (0, 1) 是 1 的分数和 (0,2) 是 2 的分数.. 所以 (0 ,2) 不包括在内.. 就像循环每个值一样,但我需要将其作为包含来执行,因为它不是相等性检查.. 这有意义吗
-
那么为什么要包括 100、10 和 18?
标签: apache-spark pyspark apache-spark-sql