dataframe - pyspark:isIN 和 isNOT IN 替换为另一个 df 列
问题描述
我正在尝试使用“isin”过滤 pyspark 中的数据帧,还尝试了另一种过滤方式。
无法得到正确的结果。得到 Spark Array 文字的错误。谁能帮忙
One way:
df1.select("COL1").distinct().show()
df2.select(('col1').isin(df1.select("COL1").distinct()))
-------
Second way :
uniquelist=df1.select("COL1").distinct().collect()
df2.filter(F.col('col1').contains(uniqueVIN)).show()
谁能帮我解决错误:
调用 z:org.apache.spark.sql.functions.lit 时出错。
我还要表演一个“不在”
data_array = np.array(df_list.select("f_col").collect())
df_filtered = df_2.filter(~df_2["colname"].isin([data_array]))
解决方案
collect()
返回Row
对象列表,您需要先从行中获取值,然后再将其传递给isin
列方法:
unique_list = [r["COL1"] for r in df1.select("COL1").distinct().collect()]
df2.filter(F.col('col1').isin(unique_list)).show()
但是,您应该为此使用 join :
用于
left_semi
从 中获取df2
相应行的行df1
:df2.join(df1, df1["COL1"] == df2["col1"], "left_semi").show()
并
left_anti
从中获取df2
没有对应值的行df1
:df2.join(df1, df1["COL1"] == df2["col1"], "left_anti").show()
推荐阅读
- mysql - SQLSTATE [22007]:无效的日期时间格式:1292 不正确的日期时间值:'2019-03-31 01:52:25'
- python - 如何在 Django 中修复“以 10 为基数的 int() 的无效文字”
- ios - ios swift tableview不显示自定义单元格
- c# - 在 UWP 中,WPF 的 DependencyProperty 类的 DependencyType 属性等价于什么?
- jupyter-notebook - 将十六进制代码从 TIFF 转换为可读格式
- java - 用于休眠 crud 操作的 Junit 测试
- javascript - 如何获取 HTML5 输入字段的“字符移动距离”
- google-apps-script - AppsScript - 如何将项目的输出(错误率、执行、用户)导入 Googlesheet
- mysql - 3个表之间的快速查询mysql
- bash - 将日期字符串转换为日期纪元 UNIX AIX