Spark中的通用RDD

时间:2015-10-28 19:58:54

标签: scala apache-spark

我有一个场景,我需要将RDD的Computed保存到任何格式中。为此,我已宣布如下特征:

trait Record扩展了Serializable

的产品

现在,在我的计算中,我说RDD的类型是:RDD [_&lt ;: Record]

它的工作和计算很好。但是当谈到拯救RDD以说在镶木地板格式时。

import sQLContext.createSchemaRDD

上面的调用是一个隐式方法的函数,它根据传入的typeTag创建模式。

implicit def createSchemaRDD[A <: Product: TypeTag](rdd: RDD[A]) = {
    ...
}

现在因为我有一个通用的RDD [_&lt;:Record],所以没有TypeTag。

虽然Record扩展了Product,但它编译了。但是当它运行时,弹出一个错误&#34; _ $ 1不是一个类。&#34;

问题现在归结为如何编写一个可以处理和保存任意类型的RDD的通用框架。

修改了Above以使用DataFrames。它仍然依赖于类型标签。

这是堆栈跟踪:

Exception in thread "main" scala.ScalaReflectionException: type _$1 is not a class
at scala.reflect.api.Symbols$SymbolApi$class.asClass(Symbols.scala:275)
at scala.reflect.internal.Symbols$SymbolContextApiImpl.asClass(Symbols.scala:84)
at org.apache.spark.sql.catalyst.ScalaReflection$class.schemaFor(ScalaReflection.scala:110)
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.SQLContext.createDataFrame(SQLContext.scala:367)
at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:47)
at com.weather.logmetrics.builders.ParquetBuilder$$anonfun$save$1.apply(ParquetBuilder.scala:30)

以下是DataFrame的创建方式。

def createDataFrame[A <: Product : TypeTag](rdd: RDD[A]): DataFrame = {
    ....
}

非常感谢任何指针。

0 个答案:

没有答案