【发布时间】:2017-02-10 02:03:50
【问题描述】:
我正在使用pyspark。我有一个火花数据框my_sdf,其col1 是整数,我预定义了一个整数列表
S1 = [1,2,3,4]
然后我想返回我的my_sdf 中的行,其中col1 在集合S1 中。所以我做了以下事情:
Test1 = my_sdf.filter(my_sdf.col1 in S1).cache()
# or Test1 = my_sdf.filter(my_sdf.col1 not in S1).cache()
Test1.count()
但它会返回
ValueError:无法将列转换为布尔值:请使用 '&' 表示 'and'、'|' for 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时。
我不知道如何解决这个问题。最后,我想将S1 = [] 作为一个空列表作为我迭代的起点,在循环期间,我将更新S1。同样,not in S1 也不起作用。我试着写了
Test1 = my_sdf.filter((my_sdf.col1 <10) & (my_sdf.col1>2)).cache()
可以,但是如果我使用过滤条件in S1,那就不行了。
另一个问题是:cache() 这个东西在做什么?如果我不放那会有什么不同吗?我被告知 spark 是lazy 用于评估代码,所以在我调用Test.count() 之前,它实际上并没有执行之前的过滤命令。但我不确定这个cache() 的工作原理有多准确。
【问题讨论】:
标签: python apache-spark pyspark