Применение функции к столбцам датафреймов spark scala - PullRequest
0 голосов
/ 31 августа 2018

У меня большой набор данных со значительно большим количеством столбцов (150), я хочу применить функцию (UDF) ко всем столбцам, ожидающим первый столбец, который имеет поле id. Мне удалось применить функцию динамически, но теперь мне нужен окончательный набор данных с идентификатором, поданным обратно на фрейм данных. Задание spark будет работать в кластерном режиме, вот что я попробовал.

val df = sc.parallelize(
  Seq(("id1", "B", "c","d"), ("id2", "e", "d","k"),("id3", "e", "m","n"))).toDF("id", "dat1", "dat2","dat3")
df.show

+---+----+----+----+
| id|dat1|dat2|dat3|
+---+----+----+----+
|id1|   B|   c|   d|
|id2|   e|   d|   k|
|id3|   e|   m|   n|
+---+----+----+----+

df.select(df.columns.slice(1,df.columns.size).map(c => upper(col(c)).alias(c)): _*).show

----+----+----+
|dat1|dat2|dat3|
+----+----+----+
|   B|   C|   D|
|   E|   D|   K|
|   E|   M|   N|
+----+----+----+

Ожидаемый результат

-----+----+----+
id|dat1|dat2|dat3|
-+----+----+----+
|id1|   B|   C|   D|
|id2|   E|   D|   K|
|id3|   E|   M|   N|
-+----+----+----+

1 Ответ

0 голосов
/ 31 августа 2018

Просто добавьте столбец id к другим (преобразованным) столбцам:

df.select(
    col("id") +: df.columns.tail.map(c => upper(col(c)).alias(c)): _*
).show
+---+----+----+----+
| id|dat1|dat2|dat3|
+---+----+----+----+
|id1|   B|   C|   D|
|id2|   E|   D|   K|
|id3|   E|   M|   N|
+---+----+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...