在 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,然后再执行 flatMap
和 map
操作:
var data = names.rdd
.flatMap(name => name.getString(0).toCharArray)
.map(rec => (rec, 1))
.reduce((x, y) => ('S', x._2 + y._2))
这将 return 6,因为您只是在计算数据帧第一列中的字符数。不确定这是否是您想要的输出。
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,然后再执行 flatMap
和 map
操作:
var data = names.rdd
.flatMap(name => name.getString(0).toCharArray)
.map(rec => (rec, 1))
.reduce((x, y) => ('S', x._2 + y._2))
这将 return 6,因为您只是在计算数据帧第一列中的字符数。不确定这是否是您想要的输出。