apache-spark - 如何用新列覆盖 Spark 数据框中的整个现有列?

标签 apache-spark dataframe pyspark apache-spark-sql apache-spark-mllib

我想用一个二进制标志的新列覆盖一个 Spark 列。

我尝试直接覆盖列 id2 但为什么它不像 Pandas 中的就地操作那样工作?

如何在不使用 withcolumn() 创建新列和 drop() 删除旧列的情况下做到这一点?

我知道 spark 数据框是不可变的,这是原因还是有不同的覆盖方式而不使用 withcolumn() 和 drop()?

    df2 = spark.createDataFrame(
        [(1, 1, float('nan')), (1, 2, float(5)), (1, 3, float('nan')), (1, 4, float('nan')), (1, 5, float(10)), (1, 6, float('nan')), (1, 6, float('nan'))],
        ('session', "timestamp1", "id2"))

    df2.select(df2.id2 > 0).show()

+---------+
|(id2 > 0)|
+---------+
|     true|
|     true|
|     true|
|     true|
|     true|
|     true|
|     true|
+---------+
 # Attempting to overwriting df2.id2
    df2.id2=df2.select(df2.id2 > 0).withColumnRenamed('(id2 > 0)','id2')
    df2.show()
#Overwriting unsucessful
+-------+----------+----+
|session|timestamp1| id2|
+-------+----------+----+
|      1|         1| NaN|
|      1|         2| 5.0|
|      1|         3| NaN|
|      1|         4| NaN|
|      1|         5|10.0|
|      1|         6| NaN|
|      1|         6| NaN|
+-------+----------+----+

最佳答案

你可以使用

d1.withColumnRenamed("colName", "newColName")
d1.withColumn("newColName", $"colName")
withColumnRenamed将现有列重命名为新名称。withColumn创建一个具有给定名称的新列。如果已经存在,它会创建一个具有相同名称的新列并删除旧列。
在您的情况下,更改不会应用于原始数据框 df2,它会更改列的名称并作为新数据框返回,该数据框应分配给新变量以供进一步使用。
d3 = df2.select((df2.id2 > 0).alias("id2"))
以上应该适用于您的情况。
希望这有帮助!

关于apache-spark - 如何用新列覆盖 Spark 数据框中的整个现有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623461/

相关文章:

r - 从 R 中具有不同列的另一个 data.frame 更新 data.frame

pyspark - 如何修复 : pyspark. sql.utils.IllegalArgumentException : incorrect type for Column features?

apache-spark - 如何在 Spark SQL 查询的 Interval 中使用动态值

scala - 使用模式将带有 Spark 的 AVRO 消息转换为 DataFrame

scala - uber jar 中的 NoSuchMethodError 异常

hadoop - 启动 hive 和 spark 时未发现合适的驱动程序错误

python - 将 pandas.DataFrame 转换为字节

python - 如何从 DataFrame 中创建列表?

pyspark - 从 Date 中获取周开始日期和周结束日期

hadoop - ClassNotFoundException : org. apache.spark.SparkConf 与配置单元上的 Spark