将相同的函数应用于火花数据帧行的所有字段

问题描述:

我有一个数据帧,其中有大约1000个(可变)列。将相同的函数应用于火花数据帧行的所有字段

我想使所有值都为大写。

下面是我想到的方法,你可以建议,如果这是最好的方法。

  • 采取行
  • 查找模式和存储阵列,并找到许多领域如何在那里。
  • 地图通过数据帧和高达在阵列
  • 元素的数目的限制的每一行应用功能为大写每个字段和返回行

如果只想相同功能应用到所有列这样的事情应该是足够:

import org.apache.spark.sql.functions.{col, upper} 

val df = sc.parallelize(
    Seq(("a", "B", "c"), ("D", "e", "F"))).toDF("x", "y", "z") 
df.select(df.columns.map(c => upper(col(c)).alias(c)): _*).show 

// +---+---+---+ 
// | x| y| z| 
// +---+---+---+ 
// | A| B| C| 
// | D| E| F| 
// +---+---+---+ 

或在Python

from pyspark.sql.functions import col, upper 

df = sc.parallelize([("a", "B", "c"), ("D", "e", "F")]).toDF(("x", "y", "z")) 
df.select(*(upper(col(c)).alias(c) for c in df.columns)).show() 

## +---+---+---+ 
## | x| y| z| 
## +---+---+---+ 
## | A| B| C| 
## | D| E| F| 
## +---+---+---+ 

另请参阅:SparkSQL: apply aggregate functions to a list of column

+0

感谢此操作英文.alias(c)):_ * – user2230605

+1

'alias'为该列设置名称。 ':_ *'表示Scala中的可变参数语法。换句话说,它传递序列中的每个元素作为'select'的参数。 – zero323