从CSV字符串创建Spark行

时间:2018-05-14 02:26:27

标签: scala apache-spark apache-spark-sql apache-spark-2.0

我是Spark(使用Scala)的新手,我在RDD到DF转换等方面尝试了一些事情。 我有一个String变量示例:

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

如何将 myString 转换为org.apache.spark.sql.Row

我尝试了下面的新内容,但是当我尝试打印创建的行的长度时,我得到1(ONE),我将得到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 :(得分:2)

正确的方法是

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)))是架构创建。