0

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

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._

我的目标是使用 someting 作为x.toDF("name","age","city").show

在最后一个示例中,toDF存在但错误"java.lang.ClassNotFoundException"


笔记:

  • 我将 Spark-shell 与 Spark v2.2 一起使用。

  • 需要基于参数化的列名称的通用转换toDF(names)而不是像创建 Vector 那样的复杂解决方案case class Person(name: String, age: Long, city: String)

toDF后显示的预期结果是

+----------+---+--------+
|      name|age|    city|
+----------+---+--------+
|John Smith| 10|Illinois|
+----------+---+--------+
4

2 回答 2

1

您应该将值放入元组中以创建 3 列

scala> Seq(("John Smith", "asd", "Illinois")).toDF("name","age","city").show
+----------+---+--------+
|      name|age|    city|
+----------+---+--------+
|John Smith|asd|Illinois|
+----------+---+--------+
于 2019-10-09T15:16:46.857 回答
0

您正在寻找的语法是。

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()
于 2019-10-09T15:08:09.750 回答