Применить ту же функцию ко всем полям строки Spark dataframe

У меня есть dataframe, в котором у меня около 1000s ( переменных) столбцов.

Я хочу, чтобы все значения в верхнем регистре.

вот подход, о котором я думал , можете ли вы предложить, если это лучший способ.

  • возьмите row
  • найти схему и хранить в массиве и найти, сколько полей есть.
  • карта через каждую строку в фрейме данных и до предела количества элементов в массиве
  • применить функцию к верхнему регистру каждого поля и возвращаемая строка

1 ответов


Если вы просто хотите применить те же функции для всех столбцов что-то вроде этого должно быть достаточно:

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: применение агрегатных функций к списку столбцов