Транспонировать фрейм данных со многими столбцами - PullRequest
0 голосов
/ 15 февраля 2019

это моя схема данных:

 `root
 |-- customerid: string (nullable = true)
 |-- event: string (nullable = true)
 |-- groupe1: string (nullable = false)
 |-- groupe2: string (nullable = false)
 |-- groupe3: string (nullable = false)

это часть моего кадра данных

+----------------+--------+--------------------+--------------+----------------+
|customerid|     |  event | group1             | group2       |    groupe3     |
+----------------+--------+--------------------+--------------+----------------+
|     4454545    |        |[aaa,0,0,0]         |[555,0,88,0,0]| [3190,0,0,0,0] |
|     8878787787 |2019    |[bbb,0,fff,0,0]     | [420,0,0,0,0]| [9580,0,0,0,0] |
|     12555888888|2019    |[cccc,0,fff,eee,0]  | [385,0,0,0,0]| [4995,0,0,0,0] |
+----------------+--------------------+--------------------+-------------------+

я попробовал этот код:

val zip = udf((xs: Seq[String], ys: Seq[String], zs: Seq[String]) => (xs, ys, zs).zipped.toSeq)

df.printSchema

val df4=df.withColumn("vars", explode(zip($"groupe1", $"groupe2",$"groupe3"))).select(
   $"customerid", $"event",
   $"vars._1".alias("groupe1"), $"vars._2".alias("groupe2"),$"vars._2".alias("groupe3"))

Я получилэта ошибка:

cannot resolve 'UDF(groupe1, groupe2, groupe3)' due to data type mismatch: argument 1 requires array<string> type, however, '`groupe1`' is of string type. argument 2 requires array<string> type, however, '`groupe2`' is of string type. argument 3 requires array<string> type, however, '`groupe3`' is of string type.;;

1 Ответ

0 голосов
/ 15 февраля 2019

Тип столбца group1, group2, group3 является строкой, поэтому он несовместим с вашим udf-файлом, в котором есть параметр Seq [string]. Возможно, вам следует изменить ввод udf на строковый тип.

...