提问者:小点点

火花:找不到单位类型的编码器


我有这样的数据框:

ID  Country  Revenue
1     US       1000
2     IND      2000
3     DE       4000

我试图转换成JSON格式,并写入我的本地路径。

输出:

[
  {
    "ID": 1,
    "Country": "US",
    "Revenue": 1000
  },
  {
    "ID": 2,
    "Country": "IND",
    "Revenue": 2000
  },......
]

代码:

import spark.implicits._

val DF = spark.sql("select  ID,Country,Revenue from  table")

DF.show()

case class ID(ID:int)

case class country(country:String)

case class Revenue(Revenue:Int)

case class details(ID:ID,country:country,Revenue:Revenue)

val JsonDF= DF.map(r=>{val details_1=details(r.getString(0),r.getString(1),r.getString(2))})

JsonDF.repartition(1).write.option("multiLine","true").json("C:/Desktop/output/revenue.json")

但我得到以下错误:

找不到Unit类型的编码器。需要隐式编码器[Unit]将Unit实例存储在Dataset中。通过导入park. impl不确定性支持原始类型(Int、String等)和产品类型(case类)。_

我的错误在哪里?


共1个答案

匿名用户

找不到类型Unit的编码器。

这意味着您将Unit值存储在数据集中,这可能不是您想要的,应该是一个提示。

替换行:

val JsonDF = DF.map(r=>{val details_1=details(r.getString(0),r.getString(1),r.getString(2))})
// DataSet[Unit]

通过:

val JsonDF = DF.map(r => details(r.getString(0),r.getString(1),r.getString(2)))
// DataSet[details]

在您的原始代码中,您正在创建一个详细信息实例,但没有在lambda中返回它。