【问题标题】:Scala: Creating a dataframe from a series of listsScala:从一系列列表创建数据框
【发布时间】:2019-03-18 05:46:04
【问题描述】:

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

【问题讨论】:

  • 我看到你的第一个列表是标题,在 spark 中你可以使用 spark.sqlContext.createDataFrame(rdd, schema) 和 option("header", "true") 写入 csv //写标题
  • 我不能使用 SQL 命令

标签: scala apache-spark


【解决方案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")
))

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2020-09-19
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多