我正在尝试将以下代码转换为在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上运行
答案 0 :(得分:3)
SparkSession
仅受到来自 spark 2.0 的支持。因此,如果您想使用 spark 1.6 ,则需要在驱动程序类中创建SparkContext
和sqlContext
并将它们传递给函数。
所以你可以创建
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会话才能将它提供给函数。