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数据框并在保持连接列的同时有条件地选择列数据