当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将相同的函数应用于spark数据帧行的所有字段》经验,为你挑选了1个好方法。

我有数据框,其中我有大约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:将聚合函数应用于列列表



1> zero323..:

如果您只是想将相同的函数应用于所有列,那么这样就足够了:

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:将聚合函数应用于列列表


`alias`为列设置名称.`:_*`表示Scala中的varargs语法.换句话说,它将序列的每个元素作为"select"的参数传递.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有