Spark 2到Spark 1.6

时间:2017-08-08 04:59:55

标签: scala apache-spark

我正在尝试将以下代码转换为在spark 1.6上运行但是,我面临着某些问题。将兴趣转化为背景

 object TestData {
  def makeIntegerDf(spark: SparkSession, numbers: Seq[Int]): DataFrame =
    spark.createDataFrame(
      spark.sparkContext.makeRDD(numbers.map(Row(_))),
      StructType(List(StructField("column", IntegerType, nullable = false)))
    )

}

如何将其转换为使其在spark 1.6上运行

2 个答案:

答案 0 :(得分:3)

SparkSession仅受到来自 spark 2.0 的支持。因此,如果您想使用 spark 1.6 ,则需要在驱动程序类中创建SparkContextsqlContext并将它们传递给函数。

所以你可以创建

val conf = new SparkConf().setAppName("simple")
val sparkContext = new SparkContext(conf)
val sqlContext = new SQLContext(sparkContext)

然后将该函数调用为

val callFunction = makeIntegerDf(sparkContext, sqlContext, numbers)

你的功能应该是

def makeIntegerDf(sparkContext: SparkContext, sqlContext: SQLContext, numbers: Seq[Int]): DataFrame =
    sqlContext.createDataFrame(
      sparkContext.makeRDD(numbers.map(Row(_))),
      StructType(List(StructField("column", IntegerType, nullable = false)))
    )

答案 1 :(得分:1)

这里唯一的主要区别是使用spark是一个火花会话而不是火花环境。

所以你会做这样的事情:

object TestData {
  def makeIntegerDf(sc: SparkContext, sqlContext: SQLContext, numbers: Seq[Int]): DataFrame =
    sqlContext.createDataFrame(
      sc.makeRDD(numbers.map(Row(_))),
      StructType(List(StructField("column", IntegerType, nullable = false)))
    )
}

当然,你需要创建一个spark上下文而不是spark会话才能将它提供给函数。