Как преобразовать массив Array [String] произвольной длины в один ряд DataFrame в spark - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть массив произвольной длины [String], например:

val strs = Array[String]("id","value","group","ts")

Как я могу перенести его в DataFrame, выглядит так:

+-----+------+-------+----+
|_0   | _1   | _2    | _3 |
+-----+------+-------+----+
|   id| value| group | ts |

Решения, которые я пробовал:

код:

spark.sparkContext.parallelize(List((strs.toList))).toDF().show()

или

spark.sparkContext.parallelize(List(strs)).toDF().show()

результат:

+--------------------+
|               value|
+--------------------+
|[id, value, group...|
+--------------------+

код:

spark.sparkContext.parallelize(strs).toDF().show()

результат:

+-----+
|value|
+-----+
|   id|
|value|
|group|
|   ts|
+-----+

Не совсем хочу.

Я знаю решение как:

 val data1 = List(
      (1,"A","X",1),
      (2,"B","X",2),
      (3,"C",null,3),
      (3,"D","C",3),
      (4,"E","D",3)
    ).toDF("id","value","group","ts").show()

Но в моем случае Array [String] имеет произвольную длину

1 Ответ

0 голосов
/ 28 февраля 2019
val strs = Array[String]("id","value","group","ts")
val list_of_strs  = List[Array[String]]() :+ strs
spark.sparkContext.parallelize(list_of_strs)
  .map { case Array(s1,s2,s3,s4) => (s1,s2,s3,s3) }
  .toDF().show()

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

Как и в случае с обновлениями, похоже, что мы не имеем дело с кортежами, это также может сработать:

val strs = Array[String]("id","value","group","ts")
spark.sparkContext.parallelize(List(strs))
  .map { case Array(s1,s2,s3,s4) => (s1,s2,s3,s3) }
  .toDF().show()

Но я не думаю, что мы можем иметь дело с массивом произвольной длины, так как это приведет к кортежу с произвольной длиной ... Это не имеет смысла, так как для DataFrame мы такжеработа со строками фиксированного определения (количество столбцов и типы столбцов).Если это действительно произойдет, вам придется заполнить оставшиеся элементы кортежа пробелами и работать с самым большим кортежем.

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