根据列表

时间:2016-09-14 21:27:07

标签: apache-spark pyspark pyspark-sql

使用以下行定义DataFrame:

df = spark.createDataFrame([Row(name='bob', income=2.0), Row(name='john', income=1.0), Row(name='evan', income=0.0), Row(name='wei', income=3.0)])

如何选择列表[0.0, 3.0]中包含值的行。我意识到我可以做类似的事情:

>>> df.where((df.income==0.0) | (df.income==3.0)).collect()
>>> [Row(income=0.0, name='evan'), Row(income=3.0, name='wei')]

但是当DataFrame有数百万行并且要过滤的可能值列表要大得多时,这不会扩展。我希望可能会有像in这样的操作:

>>> df.where(df.income in [0.0, 3.0]).collect()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/spark/python/pyspark/sql/column.py", line 427, in __nonzero__
    raise ValueError("Cannot convert column into bool: please use '&' for 'and', '|' for 'or', "
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

显然,没有定义。有什么想法吗?是否有一个简单的udf可以处理这个我可以传入列表的地方?

0 个答案:

没有答案