我试图通过多种条件获取数据框的子集,但无法在pyspark中复制常规的熊猫isin行为。可以说,我的目标数据框是(以熊猫为单位):
selection = df[string1.isin(look_string)]
其中string1是来自同一df的列(其他的串联),而look_string是具有一列和不同长度的另一df
string1 = esmm.column1 + esmm.column2 + esmm.column3
除isin之外,我可以对spark中的所有内容进行编码,请尝试
df[df.string1.isin(look_string.look_string)]
我收到一个巨大的错误消息,指出缺少以下已解决的属性 并尝试这个
esmms[df.string1.isin(look_string.select("look_string"))]
我得到这个'DataFrame'对象没有属性'_get_object_id'
什么是最好的进行方式?
答案 0 :(得分:0)
我认为'isin'方法在搜索列表或字符串时可能有效,也许不在其他数据框的列中搜索。
您可以这样做,将“ look_string”列转换为列表对象:
look_string_list = [row['look_string'] for row in look_string.select('look_string').collect()]
然后在列表上应用'isin'方法。确保在数据框上应用方法“过滤器”,并将该列作为参数。
esmms = df.filter(df.string1.isin(look_string_list))
也许这不是实现所需目标的最有效方法,因为列上的collect方法需要花费一些时间才能将行放入列表中,但我想它是可行的。