【发布时间】:2020-04-22 00:46:51
【问题描述】:
我正在尝试将 Pyspark 数据框列转换为 NOT 对象的值列表。
现在我的最终目标是将它用作过滤另一个数据帧的过滤器。
我尝试了以下方法:
X = df.select("columnname").collect()
但是当我用它来过滤时,我无法做到。
Y = dtaframe.filter(~dtaframe.columnname.isin(X)))
另外,尝试转换成numpy数组并聚合collect_list()
df.groupby('columnname').agg(collect_list(df["columnname"])
请指教。
【问题讨论】:
-
试试
dataframe.filter(~F.col("columnname").isin([x[0] for x in df.select("columname").collect()])) -
需要时间但有效!谢谢。
-
collect每次列表命中时都会执行。尝试将收集分配给一个变量,然后像a=df.select("columnname").collect()然后dataframe.filter(~F.col("columnname").isin([x[0] for x in a]))那样遍历它,所以它只收集一次 -
left_anti join超过collect()_then_filter任何一天。对于大数据,您根本无法collect()。 @anky -
@MohammadMurtazaHashmi 谢谢,是的,我也这么想