在Spark-shell中,toDF在哪里,如何与Vector,Seq或其他一起使用?



我尝试一些基本的数据类型,

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()

相关内容

  • 没有找到相关文章

最新更新