Создание Spark Row из строки CSV - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в Spark (использую Scala), пробую несколько вещей в преобразовании RDD в DF и т. Д. У меня есть строковая переменная для примера:

val myString = "apple, boy, cat, dog"

Как конвертировать myString в org.apache.spark.sql.Row

Я пробовал новые вещи, как показано ниже, но когда я пытаюсь распечатать длину созданного ряда, я получаю 1 (ОДИН), где я получаю 4.

val row = org.apache.spark.sql.Row.apply(myString)

val row1 = org.apache.spark.sql.Row(myString) 

val row2 = org.apache.spark.sql.Row.fromSeq(Seq(myString.split(',')))

1 Ответ

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

правильный путь -

org.apache.spark.sql.Row.fromSeq(myString.split(','))
//res0: org.apache.spark.sql.Row = [apple, boy, cat, dog]

, где myString.split(',') - это Array[String] и неявно преобразуется в Seq

, а если вы хотите создать фрейм данных, тогда

val myString = "apple, boy, cat, dog"

val row2 = sc.parallelize(Seq(org.apache.spark.sql.Row.fromSeq(myString.split(','))))
sqlContext.createDataFrame(row2, StructType(Seq(StructField("name1", StringType, true), StructField("name2", StringType), StructField("name3", StringType), StructField("name4", StringType)))).show(false)

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

+-----+-----+-----+-----+
|name1|name2|name3|name4|
+-----+-----+-----+-----+
|apple| boy | cat | dog |
+-----+-----+-----+-----+

, где StructType(Seq(StructField("name1", StringType, true), StructField("name2", StringType), StructField("name3", StringType), StructField("name4", StringType))) - создание схемы.

...