在 Dataframe 上使用 where() 或 filter() 时出错

Getting error when using where() or filter() on Dataframe

我想检查 Dataframe 列 first_id 中的值是否在我拥有的 python id 列表中,如果是,那么它应该通过过滤器。

first_id_list = [1,2,3,4,5,6,7,8,9]

other_ids = id_dataframe.where(ids["first_id"] in first_id_list).select("other_id")

我在 python 中写作,id_dataframe 是一个 PySpark 数据框,first_id_list 是一个 python 整数列表。

我得到的错误是:

ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

这个表达式有问题:ids["first_id"] in first_id_list

ids["first_id"] 是一个 Pyspark 专栏。 first_id_list 是一个 Python 列表。

where() Pyspark Dataframe 方法需要一个布尔列来计算,但你给它一个错误的 python 布尔表达式。

您必须使用 Pyspark 列方法 isin()(文档:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.Column.isin

答案:

other_ids = id_dataframe.where(ids["first_id"].isin(first_id_list)).select("other_id")

现在 ids["first_id"].isin(first_id_list) 是一个返回布尔列的 DataFrame 布尔表达式。