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

问题描述 投票:1回答:1

我正在尝试基于我拥有的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?

scala apache-spark
1个回答
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")
))
© www.soinside.com 2019 - 2024. All rights reserved.