问题描述:
spark将数据转成一个json写出去的时候,写出的文件中出现
{“empty”:false,“traversableAgain”:true}
因为直接用scala类,做toJSONString的转化会出问题,要先用asJava转成java类型:
JSON.toJsonString(x.getValuesMap(fieldNames)) 报错
//导包 import collection.JavaConverters._
JSON.toJsonString(x.getValuesMap(fieldNames).asJava) 报错 ambiguous reference to overloaded definition
end:
JSONUtils.toJsonString(x.getValuesMap(fieldNames).asJava)
问题描述
在scala当中,要将一个Seq转换成json字符串,直接使用fastjson提供的JSON.toJSONString() 方法就会报错 ambiguous reference to overloaded definition
解决方案:
创建一个java类,再其中创建一个调用JSON.toJSONString(ll)的方法,然后再由scala调用该方法即可,这样就可以避免scala的模糊调用。
//在scala中使用会报错
JSON.toJSONString(str)//报错
val fieldNames: Array[String] = df.schema.fieldNames
val ds: Dataset[String] = df.map(x =>
JSONUtils.toJsonString(x.getValuesMap(fieldNames).asJava)
)
public class JSONUtils {
public static String toJsonString(Object obj){
return JSON.toJSONString(obj);
}
}