为什么 toPandas() 抛出错误而 .show() 工作得很好?

Why does toPandas() throw error while .show() works perfectly fine?

我正在尝试加入两个 PySpark 数据帧。在 long 运行 上,如果它在 df2 中有匹配项,我想更改 df1 中的值。我正在使用 Jupyter notebook。

当我尝试加入并随后执行 .show() 时,一切都会成功。但是,一旦我想转换为 Pandas 数据框,就会出现值错误。

工作正常的代码:

temp = df_1.join(df_2, on='number').limit(30)
temp.show()

我已经找到了,但是除了增加限制,我试着统计了一下,两个操作都成功了,所以我不完全确定这是否是惰性评估造成的。

引起问题的代码:

temp = df_1.join(df_2, on='number').limit(30)
temp.toPandas()

我希望看到的是格式正确的前几行加入 table

每当我使用 .toPandas() 时,我都会得到一个值错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

在这种情况下,这条错误消息对我来说意义不大。

有人有什么提示吗?这可能是由于重复列 headers 造成的吗?我是不是忽略了什么?

编辑: 我正在尝试提供更多代码:

w2 = Window.partitionBy(df_0a["key"]).orderBy(df_0a["int_value_tf"].desc())
df_1 = df_0a.select('*',f.rank().over(w2).alias('rn'))\
    .filter(f.col("rn") == 1).drop("rn")

df_2 = df_0a.join(df_0b, df_0a.number == df_0b.c_number)\
    .drop(df_0b.c_number)\
    .withColumn("pn", f.when(f.col("p") == "NaN", f.col("ic1")).otherwise(f.col("p")))\
    .filter("NOT pn == 'NaN'")

@cs95:我知道这仍然不是真正的 copy-paste 类信息。如果有帮助,我可以尝试假名所有涉及的前几行 tables?

两个数据框都相当大,df_0b 的列名确实与 df_0a 不同。

升级安妮在上面评论中的回答,以备将来使用:

如果列有重复的名称,即使它们包含别名并且select使用 .select()

编辑,也会发生这种情况
df_a.join(df_b,on="c")
df_a.select("df_a.colname","df_b.colname").toPandas() <-- does not work
df_a.select("df_a.colname","df_b.colname").show() <-- works correctly