Spark 1.4.1和Scala:从头开始创建DataFrame

时间:2016-04-20 07:26:00

标签: scala apache-spark

我已经创建了一堆我需要用于测试目的的案例类。我当时正在做很多这样的陈述:

case class Bar(id: Int, desc: String)
val foo = Bar(1, "baz")
val bar = sc.makeRDD(Array(foo)).toDF

有效。因为我正在做很多这些调用,所以我认为创建一个函数会很好:

def dfify[T: ClassTag](obj: T): DataFrame = sc.makeRDD(Array(obj)).toDF

然而,这给了我以下错误:

error: value toDF is not a member of org.apache.spark.rdd.RDD[T]

我尝试在稍微不同的上下文中添加上下文绑定的T<:Product [{3}},但这没有帮助。

问题在于没有它的功能,但是让一些重复的位稍微简化会很好。我认为需要花费1分钟的东西已经花费了更多而没有结果。

我在使用Spark 1.4.1并且无法更改,因此我无法使用createDataFrame()

想法?

1 个答案:

答案 0 :(得分:0)

您还必须创建SQLContext并导入其含义,否则将RDD隐式转换为DataFrameHolder(具有toDF方法)isn'在范围内。

另一个问题是 - ClassTag还不够,还需要TypeTag

此代码编译并运行:

import scala.reflect.runtime.universe._
import scala.reflect.ClassTag

val sqlContext = new SQLContext(sc)
import sqlContext.implicits._

def dfify[T <: Product : ClassTag : TypeTag](obj: T): DataFrame = sc.makeRDD(Array(obj)).toDF()