Функция Spark Map для обновления столбцов - PullRequest
0 голосов
/ 10 мая 2018

Scala 2.11 здесь.У меня есть следующая таблица input DB:

[input]
===
id BIGINT UNSIGNED NOT NULL,
name VARCHAR(50) NOT NULL,
rank INT NOT NULL

Я читаю некоторые input записи в Spark DataFrame примерно так:

val inputDf = sqlContext().read
    .format("blah whatever")
    .option("url", "jdbc://blah://whatever")
    .option("query", "SELECT * FROM input WHERE id < 500")
    .load()

Пока все хорошо.Теперь я хочу просмотреть каждую строку в inputDf и применить преобразование к полю rank:

rank = rank * 50

Следовательно, если из БД будут считаны следующие 3 input записи:

id | name | rank
================
1  | Fizz | 3
2  | Buzz | 14
3  | Foo  | 294

Тогда результирующий DataFrame должен выглядеть следующим образом:

id | name | rank
================
1  | Fizz | 150
2  | Buzz | 700
3  | Foo  | 14700

Я считаю Я могу использовать функцию map что-то вроде:

inputDf.map(input =>
  // I believe this gets me the value of the 3rd column (rank):
  input.getInt(3).intValue()

  // Now how to update/set rank as 'rank *= 50' ?
  ???
).collect()

Но мне трудно видеть "лес сквозь деревья". Есть идеи? Результатом должен быть inputDf, столбец / поле которого rank был обновлен / преобразован правильно.

1 Ответ

0 голосов
/ 10 мая 2018

Просто используйте withColumn:

inputDf.withColumn("rank",  inputDf("rank") * 50)

или select:

inputDf.withColumn($"*",  ($"rank" * 50).alias("rank"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...