내가 스파크 1.5.0을 사용하고 지원되지 않으며 나는이 문제를 가지고 : 당신이 열 설명 이있다 볼 수스파크 dataframe는 : 유형 장치에 대한 스키마
다음val df = paired_rdd.reduceByKey {
case (val1, val2) => val1 + "|" + val2
}.toDF("user_id","description")
이, DF에 대한 샘플 데이터입니다 형식 (text1#text3#weight | text1#text3#weight|....)
사용자 1
여기 내림차순으로 중량을 기준으로 DF이를 정렬 할book1#author1#0.07841217886795074|tool1#desc1#0.27044260397331488|song1#album1#-0.052661673730870676|item1#category1#-0.005683148395350108
내가 뭘하려 :
먼저 "|" 다음 해당 문자열의 각각에 대해, "#"그들을 분할 무게 3 문자열을 얻을 다음 내림차순으로 (이중 값으로 UDF에 의해 반환 된 무게 값을 기준으로
val getSplitAtWeight = udf((str: String) => {
str.split("|").foreach(_.split("#")(2).toDouble)
})
정렬하는 변환 방식)
val df_sorted = df.sort(getSplitAtWeight(col("description")).desc)
나는 다음과 같은 오류 얻을 : 당신의 udf
에
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)
"main"스레드에서 예외가 발생했습니다. org.apache.spark.sql.AnalysisException : 데이터 형식이 일치하지 않아 'UDF (annotation) DESC'를 해결할 수 없습니다. 데이터 형식 배열을 정렬 할 수 없습니다.; \t at org.apache.spark.sql.catalyst.analysis.package $ AnalysisErrorAt.failAnalysis (package.scala : 42) –
user3803714
확실하지 않습니다. 스파크 1.6.0에서는 예외가 없습니다. 그러나 이것이 의미하는 바는, 쪼개진 후 설명의 모든 문자열에 대해 네 개의 숫자를 얻는다는 것입니다.이 숫자는 '배열'의 출처입니다. 그리고 spark는 배열을 요소로 포함하는 열을 어떻게 정렬할지 모릅니다. 그리고 또한 어떤 숫자를 정렬 할 것인지 진행하기 전에 묻는 것이 좋습니다. –
Psidom