pyspark重命名所有列

时间:2019-07-20 09:58:06

标签: apache-spark dataframe pyspark

根据文档和帖子,

df_inner_join = dfA.join(dfB, dfA.index == dfB.index)
new_names = ['value1', 'index1', 'value2', 'index2']
df_inner_join.toDF(*new_names)

应该可以,但是不能。我看到DF上仍然有旧名称。

这当然考虑到了不变的方面:

df_inner_join = dfA.join(dfB, dfA.index == dfB.index)
new_names = ['value1', 'index1', 'value2', 'index2']
df = df_inner_join.toDF(*new_names)

问题是为什么在其他地方查看帖子时前者不起作用?

总的来说,我发现Scala和pyspark接口中的JOIN和列重命名都有一些问题。

编辑

看了其他帖子,并做出了错误的假设。忽略我自己不了解的不太可能的不变方面。看着PySpark - rename more than one column using withColumnRenamed,以某种方式...

1 个答案:

答案 0 :(得分:0)

我认为这是由于您没有将'toDF'操作的结果分配给任何变量的事实。由于spark数据框默认情况下是不可变的,因此它不支持任何修改,因此任何导致更改的操作(此处的更改是架构更改)都会导致创建新的数据框,而现有的数据框保持不变。在您的第一个代码中,您没有将新的“更改的”数据帧分配给任何变量,因此更改丢失并且现有的df_inner_join保持不变。

对于第二个小代码,您进行了分配,因此新的数据帧'df'反映了更改。