Как преобразовать столбец с помощью String в Array [String] в Scala / Spark? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть фрейм данных:

+--------------------------------------+------------------------------------------------------------+
|item                                  |item_codes                                               |
+--------------------------------------+------------------------------------------------------------+
|loose fit long sleeve swim shirt women|["2237741011","1046622","1040660","7147440011","7141123011"]|
+--------------------------------------+------------------------------------------------------------+

И схема выглядит следующим образом =

root
 |-- item: string (nullable = true)
 |-- item_codes: string (nullable = true)

Как я могу преобразовать строку столбца item_codes в Array [String] в Scala?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете удалить кавычки / квадратные скобки, используя regexp_replace, а затем split для создания столбца ArrayType:

val df = Seq(
  ("abc", "[\"2237741011\",\"1046622\",\"1040660\",\"7147440011\",\"7141123011\"]")
).toDF("item", "item_codes")

df.
  withColumn("item_codes", split(regexp_replace($"item_codes", """\[?\"\]?""", ""), "\\,")).
  show(false)
// +----+------------------------------------------------------+
// |item|item_codes                                            |
// +----+------------------------------------------------------+
// |abc |[2237741011, 1046622, 1040660, 7147440011, 7141123011]|
// +----+------------------------------------------------------+
0 голосов
/ 30 октября 2019

Вы можете использовать метод split после некоторой «предварительной обработки»

val col_names = Seq("item", "item_codes")

val data = Seq(("loose fit long sleeve swim shirt women", """["2237741011","1046622","1040660","7147440011","7141123011"]"""))

val df = spark.createDataFrame(data).toDF(col_names: _*)

// chop off first 2 and last 2 character and split at ","
df.withColumn("item_codes", split(expr("substring(item_codes, 3, length(item_codes)-4)"), """","""")).printSchema

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

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