我已在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上 –