我有数据框,其中我有大约1000(可变)列.
我想让所有值都大写.
这是我想到的方法,你能否说一下这是最好的方法.
拿排
在数组中查找模式并存储,并查找有多少字段.
映射数据框中的每一行,并最多限制数组中元素的数量
将函数应用于大写每个字段并返回行
zero323.. 29
如果您只是想将相同的函数应用于所有列,那么这样就足够了:
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:将聚合函数应用于列列表
如果您只是想将相同的函数应用于所有列,那么这样就足够了:
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:将聚合函数应用于列列表