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



如何仅返回火花数据框的行,其中列的值在指定的列表中?

这是我的python pandas进行此操作的方式:

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

我看到了这个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

作为DMDMDMDMDMD在评论中指出的是,第二种方法无效,因为需要导入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']))

最新更新