Разделение данных столбца по разделителю - PullRequest
0 голосов
/ 15 мая 2018

У меня есть фрейм данных Spark (1.4), где данные в столбце похожи на "1-2-3-4-5-6-7-8-9-10-11-12".Я хочу разбить данные на несколько столбцов.Обратите внимание, что количество полей может варьироваться от 1 до 12, оно не фиксировано.PS Мы используем Scala API.

Редактировать:

Редактирование исходного вопроса.У меня есть строка с разделителями, как показано ниже:

"ABC-DEF-PQR-XYZ"

Из этой строки мне нужно создать строки с разделителями в отдельных столбцах, как показано ниже.Обратите внимание, что эта строка находится в столбце в DF.

Original column: ABC-DEF-PQR-XYZ
New col1 : ABC
New col2 : ABC-DEF
New col3 : ABC-DEF-PQR
New col4 : ABC-DEF-PQR-XYZ

Обратите внимание, что может быть 12 таких новых столбцов, которые необходимо получить из исходного поля.Кроме того, строка в исходном столбце может отличаться, то есть иногда 1 столбец, иногда 2, но максимум может быть 12. Надеюсь, я четко сформулировал формулировку задачи.

Спасибо!

1 Ответ

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

Вы можете использовать explode и pivot. Вот некоторые примеры данных:

df=sc.parallelize([["1-2-3-4-5-6-7-8-9-10-11-12"], ["1-2-3-4"], ["1-2-3-4-5-6-7-8-9-10"]]).toDF(schema=["col"])

Теперь добавьте уникальный идентификатор в строки, чтобы мы могли отслеживать, к какой строке относятся данные:

df=df.withColumn("id", f.monotonically_increasing_id())

Затем разделите столбцы по разделителю -, а затем взорвитесь, чтобы получить длинный набор данных:

df=df.withColumn("col_split", f.explode(f.split("col", "\-")))

Наконец, поверните id, чтобы вернуться к широкой форме:

df.groupby("id")
  .pivot("col_split")
  .agg(f.max("col_split"))
  .drop("id").show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...