我正在尝试基于我拥有的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?
您遇到的问题源于不同列中的数据类型。
因为数据中有整数和字符串,所以您不能将其视为列表列表。嗯,你可以,但是“内部”列表将有一个元素类型Any
,这是Int
和String
最接近的共享祖先。当然,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")
))