apache-spark - 如何在不指定所有列名的情况下将多个列值更改为常量?

标签 apache-spark pyspark apache-spark-sql

我在 spark 中有一个非常宽的数据框。它有 80 列,所以我想将一列设置为 0,其余的设置为 1。

所以我想设置为 1 的那个我试过了

df = df.withColumn("set_zero_column", lit(0))

它奏效了。

现在我想将其余列设置为 1,如果不指定所有 79 个名称怎么办?

感谢任何帮助

最佳答案

使用带有列表理解的select:

from pyspark.sql.functions import lit

set_one_columns = [lit(1).alias(c) for c in df.columns if c != "set_zero_column"]
df = df.select(lit(0).alias("set_zero_column"), *set_one_columns)

如果你需要保持原来的列顺序,你可以这样做:

cols = [lit(0).alias(c) if c == "set_zero_column" else lit(1).alias(c) for c in df.columns]
df = df.select(*cols)

关于apache-spark - 如何在不指定所有列名的情况下将多个列值更改为常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203123/

相关文章:

scala - setMaster `local[*]`在spark中是什么意思?

amazon-web-services - Spark - "spark.deploy.spreadOut = false"可以在 S3 上提供性能优势

apache-spark - Spark 将数据插入 Hive 外部表,创建非常小的部分文件

python - pyspark计算稀疏向量的距离矩阵

postgresql - Spark 不会在集群中分发提供的驱动程序

python - 如何在pyspark中将DenseMatrix转换为spark DataFrame?

scala - Spark 1.6:将数据帧存储到hdfs中的多个csv文件中(按ID划分)

python - 将数组列转换为 PySpark 数据框中的结构数组

apache-spark - 使用 Window() 计算 PySpark 中数组的滚动总和?

apache-spark - 使用聚合函数时发生 Spark 数据帧错误