我已在RDD與數組轉換RDD到數據幀
RDD[(Long, Array[(Long, Double)])]
下面我想這個轉換成數據幀。 我使用下面的代碼
val aStruct = new StructType(Array(
StructField("id", LongType,nullable = true),
StructField("neighbors",ArrayType(
StructType(Array(
StructField("nid", LongType),
StructField("distance", DoubleType)
))),nullable = true)))
val rowRDD = neighbors.map(p => Row(p._1, p._2))
val neighborsDF = sqlContext.createDataFrame(rowRDD,aStruct)
這編譯正確,但給了我一個運行時錯誤
Error while encoding: java.lang.RuntimeException: scala.Tuple2$mcJD$sp is not a valid external type for schema of struct<nid:bigint,distance:double>
是我的架構不正確的?
我也試過
import spark.implicits._
val neighborsDF = neighbors.toDF()
但爲了這個,我得到以下運行時錯誤
Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaMirrors$JavaMirror;
在我所謂的toDF行()
什麼我錯在這裏做? (我期待了很多:P)
所以我做understant這個問題,我在RDD元組的數組,但我似乎無法找到元組類型星火SQL架構
第二個問題是因爲在編譯和運行時和/或Scala版本的庫上有不匹配的Scala版本 –
@T.Gawęda其實你是對的,那個問題確實存在。在我的build.sbt我有scala版本2.10.5,而我的scala版本2.12.1安裝在我的系統上。我剛剛下載了2.10.5,並設置了我的路徑並通過scala -version進行了檢查,結果爲2.10.5。但是我仍然得到相同的錯誤 –
也檢查Spark版本,如果它包含名稱中的2.11',它將編譯爲Scala 2.11。 Spark 2.x默認建立在Scala 2.11上 –