我正在尝试基于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?
答案 0 :(得分:1)
您遇到的问题源于不同列中的数据类型。
因为数据中既有整数,又有字符串,所以不能将其视为列表列表。可以,但是“内部”列表的元素类型为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")
))