Scala:从一系列列表创建数据框

时间:2019-03-17 01:00:24

标签: scala apache-spark

我正在尝试基于4个列表创建一个数据框。我只需要使用scala(出于各种原因,我们不能使用SQL)。

所有列表都有3个值,而column_head列表是列名称的列表。

column_head =["a","b","c"]

master_in =[1,2,"dog"]

master_out =[3,4,"cat"]

master_max = [5,6,"llama"]

我尝试过:

val values 
=Seq(columns_head,master_in,master_out,master_maxweight)

val master_df= values.toDF()

但是我得到一个异常说:java.lang.ClassNotFoundException:scala.Any

这可能是因为每个列表的最后一个值是STRING值,而每个列表的前两个是INTEGERS。

我该如何解决这个问题?

我不能导入以下任何其他库:

import org.apache.spark.sql.functions.desc

import org.apache.spark.sql.functions._

case class edges(Source: String, Target: String, Weight: Int)

import spark.implicits._

如何从列表中创建df?

1 个答案:

答案 0 :(得分:1)

您遇到的问题源于不同列中的数据类型。

因为数据中既有整数,又有字符串,所以不能将其视为列表列表。可以,但是“内部”列表的元素类型为Any,它是IntString的最接近的共享祖先。当然,Spark无法与Any一起使用。太笼统了。

解决方案很简单:使用案例类显式描述数据类型。

case class Data(a: Int, b: Int, c: String)

spark.createDataFrame(Seq(
  Data(1,2,"dog"), Data(3,4,"cat"), Data(5,6,"llama")
))