我使用星火1.5.0,我有这个问题:星火据帧:架构类型单位不支持
val df = paired_rdd.reduceByKey {
case (val1, val2) => val1 + "|" + val2
}.toDF("user_id","description")
下面是DF样本数据,你可以看到在列说明具有 这格式(text1#text3#weight | text1#text3#weight|....)
USER1
book1#author1#0.07841217886795074|tool1#desc1#0.27044260397331488|song1#album1#-0.052661673730870676|item1#category1#-0.005683148395350108
我想解决这DF基于体重这里降序排列是我的尝试:
首先将内容分割为“|”然后为每个字符串,以“#”分裂他们,并得到第三根弦是重量,然后再转换为双精度值基于UDF返回称重值
val getSplitAtWeight = udf((str: String) => {
str.split("|").foreach(_.split("#")(2).toDouble)
})
排序(从大到小方式)
val df_sorted = df.sort(getSplitAtWeight(col("description")).desc)
我得到以下错误:
Exception in thread "main" java.lang.UnsupportedOperationException: Schema for type Unit is not supported at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:153) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:29) at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:64) at org.apache.spark.sql.catalyst.ScalaReflection$.schemaFor(ScalaReflection.scala:29) at org.apache.spark.sql.functions$.udf(functions.scala:2242)
现在我得到这个错误:例外在线程“主要” org.apache.spark.sql.AnalysisException:无法解析“UDF(注释)DESC”由于数据类型不匹配:不能排序的数据类型的数组; \t at org.apache.spark.sql.catalyst.analysis.package $ AnalysisErrorAt.failAnalysis(package.scala:42) –
user3803714
不完全确定。在火花1.6.0上,没有例外。但我认为这意味着对于分割后的描述中的每个字符串,都会得到四个数字,这是'array'的来源。并且spark不知道如何对包含数组的列进行排序。而且,在继续处理之前,您要排序的数字也是一个很好的问题。 –
Psidom