是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?

Posted

技术标签:

【中文标题】是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?【英文标题】:Is it possible to filter Spark DataFrames to return all rows where a column value is in a list using pyspark? 【发布时间】:2017-03-13 22:50:20 【问题描述】:

如何仅返回 Spark DataFrame 中列的值在指定列表中的行?

这是我的 Python pandas 执行此操作的方式:

df_start = df[df['name'].isin(['App Opened', 'App Launched'])].copy()

我看到this SO scala 实现并尝试了几种排列,但无法使其工作。

这是一次使用 pyspark 失败的尝试:

df_start = df_spark.filter(col("name") isin ['App Opened', 'App Launched'])

输出:

Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-6660042787423349557.py", line 253, in <module>
    code = compile('\n'.join(final_code), '<stdin>', 'exec', ast.PyCF_ONLY_AST, 1)
  File "<stdin>", line 18
    df_start = df_spark.filter(col("name") isin ['App Opened', 'App Launched'])
                                               ^
SyntaxError: invalid syntax

另一个尝试:

df_start = df_spark.filter(col("name").isin(['App Opened', 'App Launched']))

输出:

Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-6660042787423349557.py", line 267, in <module>
    raise Exception(traceback.format_exc())
Exception: Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-6660042787423349557.py", line 260, in <module>
    exec(code)
  File "<stdin>", line 18, in <module>
NameError: name 'col' is not defined

【问题讨论】:

你的尝试结果如何? 谢谢。刚刚添加了输出以及另一个失败的尝试。 这是因为你还没有导入col。试试from spark.sql.functions import col 【参考方案1】:

正如 dmdmdmdmdmd 在 cmets 中指出的那样,第二种方法不起作用,因为需要导入 col

from pyspark.sql.functions import col
df_start = df_spark.filter(col("name").isin(['App Opened', 'App Launched']))

这是完成过滤器的另一种方式:

df_start = df_spark.filter(df_spark.name.isin(['App Opened', 'App Launched']))

【讨论】:

以上是关于是否可以使用 pyspark 过滤 Spark DataFrames 以返回列值在列表中的所有行?的主要内容,如果未能解决你的问题,请参考以下文章

在 pyspark shell 中工作的过滤器不是 spark-submit

是否可以在 Pyspark 中对 DataFrame 进行子类化?

基于在 DataBrick 中的笔记本顶部提取小部件值来动态检索/过滤 Spark 框架的最佳 PySpark 实践是啥?

我可以使用spark 2.3.0和pyspark从Kafka进行流处理吗?

PySpark:使用 isin 过滤返回空数据框

在 Pyspark 中使用整数与十进制值进行过滤