Spark DataFrame Разнесение столбца - PullRequest
0 голосов
/ 13 июня 2018

Каждая строка в кадре данных содержит строку в формате csv line плюс еще одну простую строку, поэтому в конце я пытаюсь получить кадр данных, состоящий из полей, извлеченных из строки line вместе с category.Поэтому я продолжил следующим образом, взорвав строку line

val df = stream.toDF("line","category")
.map(x => x.getString(0))......

. В конце мне удается получить новый кадр данных, состоящий из полей строк, но я не могу вернуть category в новый кадр данныхЯ не могу соединить новый фрейм данных с исходным, поскольку общее поле id сначала не было отдельным столбцом.

Пример ввода:

line                           | category 
"'1';'daniel';'dan@gmail.com'" | "premium"

Пример вывода:

id  | name    | email          | category
1   | "daniel"| "dan@gmail.com"| "premium"

Любые предложения, заранее спасибо.

1 Ответ

0 голосов
/ 13 июня 2018

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

import org.apache.spark.sql.functions._
df.withColumn("line", split(col("line"), ";"))
  .select(col("line")(0).as("id"), col("line")(1).as("name"), col("line")(2).as("email"), col("category"))
  .show(false)

, который должен дать вам

+---+--------+---------------+--------+
|id |name    |email          |category|
+---+--------+---------------+--------+
|'1'|'daniel'|'dan@gmail.com'|premium |
+---+--------+---------------+--------+

Я надеюсь, что ответ полезен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...