创建spark数据集时出现问题

时间:2016-10-08 15:05:50

标签: apache-spark-sql

我正在尝试将json读入数据帧,然后读取数据集。 我面临以下问题。有人可以快点帮助我。

成功创建了PrintDF数据框,下面是架构。

scala> personDF.printSchema();
root
|-- personDF: struct (nullable = true)
|    |-- city: string (nullable = true)
|    |-- line1: string (nullable = true)
|    |-- postalCode: string (nullable = true)
|    |-- state: string (nullable = true)
|    |-- type1: string (nullable = true)

我创建了一个案例类来捕获上面的DF。

scala> case class address1(city:String,line1:String,postalCode:String,state:String,type1:String)
defined class address1

以下是personDF目前的数据

scala> personzDF.show()

+--------------------+
|            personDF|
+--------------------+
|[CENTERPORT,5 PRO...|
|[HUNTINGTON,94 JA...|
|[RIVERHEAD,9 PATT...|
|[NORTHPORT,50 LIS...|
|[NORTHPORT,24 LAU...|
|[NORTHPORT,340 SC...|
|[GREENLAWN,166 BR...|
|[MELVILLE,1 MERID...|
+--------------------+

最后,当我创建数据集时,我收到以下错误。

scala> val ds = personDF.as[address1]
<console>:32: error: overloaded method value as with alternatives:
  (alias: Symbol)org.apache.spark.sql.DataFrame <and>
  (alias: String)org.apache.spark.sql.DataFrame
does not take type parameters
       val ds = personDF.as[address1]

我进行了谷歌搜索,找不到原因。

谢谢, Sivaram

1 个答案:

答案 0 :(得分:0)

实际上,personDF是一个structType personDF的数组,但它不是你对printSchema()所期望的结构:

| - personDF:struct(nullable = true)

你是否试图将personzDF转换为address1类型?然后尝试这样:

val ds = personzDF.map(rec => rec.split(","))
  .map(rec => address1(rec(0), rec(1), rec(2), rec(3), rec(4)))
  .toDF()

希望它有所帮助。