在 spark 中使用带有 toCharArray 的 flatMap 时无法找到编码 [Char]

Unable to find Encode[Char] while using flatMap with toCharArray in spark

import spark.implicits._
import org.apache.spark.sql.functions._
var names = Seq("ABC","XYZ").toDF("names")
var data = names.flatMap(name=>name.getString(0).toCharArray).map(rec=> 
                              (rec,1)).rdd.reduce((x,y)=>('S',x._2 + y._2))

错误:错误:(20, 27) 无法找到 Char 类型的编码器。需要隐式 Encoder[Char] 来将 Char 实例存储在 Dataset 中。通过导入支持基本类型(Int、String 等)和产品类型(case 类)spark.implicits._ 将在未来的版本中添加对序列化其他类型的支持。 var data = names.flatMap(name=>name.getString(0).toCharArray).map(rec=>(rec,1)).rdd.reduce((x,y)=>( 'S',x._2 + y._2))

您可以先将数据帧转换为 RDD,然后再执行 flatMapmap 操作:

var data = names.rdd
                .flatMap(name => name.getString(0).toCharArray)
                .map(rec => (rec, 1))
                .reduce((x, y) => ('S', x._2 + y._2))

这将 return 6,因为您只是在计算数据帧第一列中的字符数。不确定这是否是您想要的输出。