我有这样的数据框:
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类)。_
我的错误在哪里?
找不到类型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中返回它。