hba*_*bar 8 dataframe apache-spark-sql spark-dataframe
我有一个带有可配置列名的数据框,例如
Journey channelA channelB channelC
j1 1 0 0
j1 0 1 0
j1 1 0 0
j2 0 0 1
j2 0 1 0
Run Code Online (Sandbox Code Playgroud)
通过可配置,我的意思是数据帧中可能有'n'个通道.
现在我需要进行转换,我需要找到所有通道的总和
df.groupBy("Journey").agg(sum("channelA"), sum("channelB"), sum("channelC"))
Run Code Online (Sandbox Code Playgroud)
其输出将是:
Journey sum(channelA) sum(channelB) sum(channelC)
j1 2 1 0
j2 0 1 1
Run Code Online (Sandbox Code Playgroud)
现在我想将列名重命名为原始名称,我可以使用
.withColumnRenamed("sum(channelA)", channelA)
Run Code Online (Sandbox Code Playgroud)
但正如我所提到的那样,通道列表是可配置的,我希望通用列重命名语句将所有求和列重命名为原始列名,以获得预期的数据帧:
Journey channelA channelB channelC
j1 2 1 0
j2 0 1 1
Run Code Online (Sandbox Code Playgroud)
任何建议如何处理这个
Umb*_*ffo 17
要重命名您的DataFrame列,您可以使用方法toDF(scala.collection.Seq colNames),您可以使用原始列名填充dinamically colNames.
所以你可以像这样填充dinamically序列:
val columnsRenamed = Seq("Journey", "channelA", "channelB","channelC")
Run Code Online (Sandbox Code Playgroud)
然后调用方法toDF:
df = df.toDF(columnsRenamed: _*)
Run Code Online (Sandbox Code Playgroud)
: _*运算符的原因是将表单转换Seq[String]为String*.
| 归档时间: |
|
| 查看次数: |
15615 次 |
| 最近记录: |