我尝试一些基本的数据类型,
val x = Vector("John Smith", 10, "Illinois")
val x = Seq("John Smith", 10, "Illinois")
val x = Array("John Smith", 10, "Illinois")
val x = ...
val x = Seq( Vector("John Smith",10,"Illinois"), Vector("Foo",2,"Bar"))
但没有人提供toDF()
,即使在import spark.implicits._
之后.
我的目标是使用一些x.toDF("name","age","city").show
在最后一个示例中,toDF
存在,但错误为"java.lang.ClassNotFoundException"。
笔记:
我正在使用Spark-shell和Spark v2.2。
需要基于
toDF(names)
参数化的列名的泛型变换,而不是像创建case class Person(name: String, age: Long, city: String)
向量的复杂解
toDF后显示的预期结果为:
+----------+---+--------+
| name|age| city|
+----------+---+--------+
|John Smith| 10|Illinois|
+----------+---+--------+
您应该将值放在元组中以创建 3 列
scala> Seq(("John Smith", "asd", "Illinois")).toDF("name","age","city").show
+----------+---+--------+
| name|age| city|
+----------+---+--------+
|John Smith|asd|Illinois|
+----------+---+--------+
您正在寻找的语法是。
val x = Array("John Smith", "10", "Illinois")
sc.parallelize(x).toDF()
另一种方式是,
val y = Seq("John Smith", "10", "Illinois")
Seq(y).toDF("value").show()
这也应该有效。
Seq(Vector("John Smith","10","Illinois"), Vector("Foo","2","Bar")).toDF()