当前位置: 首页 > 知识库问答 >
问题:

Spark DataFrame如何在没有连接的情况下更改一列的排列[重复]

程磊
2023-03-14

我正在尝试使用Pyspark来置换dataframe中的一列,也就是在行间洗牌单个列的所有值。

# for some dataframe spark_df
new_df = spark_df.select(colname).sort(colname)
new_df.show() # column values sorted nicely
spark_df.withColumn("ha", new_df[colname]).show() 
# column "ha" no longer sorted and has same permutation as spark_df.colname

编辑:对不起,如果我的问题不清楚,我只是想用它的排序版本替换一个列,而不做联接。感谢您指出dfs不是可变的,但即使执行spark_df.withcolumn(“ha”,spark_df.select(colname).sort(colname)[colname]).show()也会显示列'ha'与'colname'具有相同的排列,而对列本身执行排序则显示不同的排列。问题主要是关于为什么排列在新列“ha”中保持不变,而不是关于如何替换列。再次感谢!(也改了标题以更好地反映问题)

共有1个答案

厉钊
2023-03-14

Spark dataframes和RDDs是不可变的。每进行一次转换,就会创建一个新的转换。因此,当执行new_df=spark_df.select(colname).sort(colname)时,spark_df保持不变。只有new_df进行排序。这就是为什么spark_df.withcolumn(“ha”,new_df[colname])返回未排序的DataFrame。

请尝试new_df.withcolumn(“ha”,new_df[colname])

 类似资料:
  • 我有一堆CSV文件,它们是作为数据流读取的。对于每个dataframe,我希望更改一些列名,如果某个dataframe中存在特定列: column_name_update_map={'aa':'xx';'bb':'yy'}

  • 这两个dataframe没有任何公共列。两个数据流中的行数和列数也不同。我尝试插入一个新的虚拟列,以增加row_index值,如下val dfr=df1.withcolumn(“row_index”,monotonically_increasing_id())所示。 但由于我使用的是Spark2,因此不支持monotonically_increasing_id方法。有没有办法把两个datafram

  • 问题内容: 我想更改数据库表的列位置而不丢失数据。 例如: 当前表: 到 问题答案: 试试这个:

  • 我想在不丢失数据的情况下更改数据库表的列位置。 例如: 当前表格: 到

  • 本文向大家介绍在某些情况下如何更改R数据帧中的列?,包括了在某些情况下如何更改R数据帧中的列?的使用技巧和注意事项,需要的朋友参考一下 有时,特定列的列值与另一列有某种关系,我们可能需要根据某些条件来更改该特定列的值。我们需要进行此更改,以检查列值的更改如何对所考虑的两个列之间的关系产生影响。在R中,我们可以使用单个方括号来更改列值。 示例 请看以下数据帧- 假设我们想从第2列(x2)值中减去2,

  • 我尝试为我的数据创建带有“转换”的插件到kafka-connect,并将其与不同的接收器连接器一起使用。当我安装插件时,kafka-connect看不到我的类。 我使用kafka connect maven插件创建了我的捆绑包zip。使用confluent hub(来自本地文件)的安装已成功。 所有文件都已解压,我的工作者属性已更新插件。路径。我在分布式模式下运行connect,并尝试从包中创建带