Spark SQL - 选择所有 AND 计算列?

Posted

技术标签:

【中文标题】Spark SQL - 选择所有 AND 计算列?【英文标题】:Spark SQL - Select all AND computed columns? 【发布时间】:2016-07-19 20:19:04 【问题描述】:

这是一个完全的菜鸟问题,很抱歉。在 Spark 中,我可以使用 select as:

df.select("*"); //to select everything
df.select(df.col("colname")[, df.col("colname")]); //to select one or more columns
df.select(df.col("colname"), df.col("colname").plus(1)) //to select a column and a calculated column

但是。如何选择所有列加上计算的列?明显地 select("*", df.col("colname").plus(1)) 不起作用(编译错误)。在 JAVA 下如何做到这一点? 谢谢!

【问题讨论】:

【参考方案1】:

只要做:

df.select(df.col("*"), df.col("colName").plus(1));

【讨论】:

使用 pyspark 导入 co:from pyspark.sql.functions import col 通常我更喜欢下面的withColumn 解决方案。但是,如果你想解压一个结构列,这是我知道的最好的方法。 IE。 df.select(df.col("*"), df.col("colName.*")) 其中 colName 有多个(命名的)值。【参考方案2】:

您可以使用withColumn() 方法,这将为DataFrame 创建一个新列。

df.select("*")
  .withColumn("ColName", col("colName").plus(1))

【讨论】:

我个人更喜欢这个。将我所有的计算列放在一起。 您可以直接在数据框上添加一列,而无需选择df.withColumn("ColName", col("colName").plus(1))【参考方案3】:

.select() 和 .withColumn() 方法之间的区别在于 .select() 只返回您指定的列,而 .withColumn() 则返回 DataFrame 中除您定义的列之外的所有列。

你可以直接使用withColumn

df.withColumn("ColName", col("colName").plus(1))

【讨论】:

以上是关于Spark SQL - 选择所有 AND 计算列?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算列的每个值所在的百分位数? (Spark SQL)[重复]

比较两个(py)spark sql数据框并在保持连接列的同时有条件地选择列数据

使用 $ 值 spark sql 调用列

使用空数据集的Spark SQL连接会导致更大的输出文件大小

Spark DataFrame 在所有列上都是唯一的

如何计算Apache Spark DataFrame中所有列的不同值的数量[重复]