为Spark 2.x SQLContexts设置Hadoop配置属性

时间:2018-05-11 18:36:04

标签: apache-spark

Spark 2.x在这里。我需要设置以下Hadoop配置,以便我的# Temporary workaround for there not being an llvm6 apk yet # Open PR for llvm6 package: https://github.com/alpinelinux/aports/pull/3583 # See https://stackoverflow.com/questions/50258121/building-llvm-6-under-linux-alpine RUN export BUILD_DEPS='alpine-sdk git diffutils' \ && apk update \ && apk add $BUILD_DEPS \ && adduser -D apk \ && adduser apk abuild \ && sudo -iu apk abuild-keygen -a \ && sudo -iu apk git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports \ && sudo -iu apk sh -xec 'cd aports/main/llvm6; abuild -r' \ && cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys \ && apk add /home/apk/packages/main/$(uname -m)/*.apk \ && deluser --remove-home apk \ && rm -rf /var/cache/apk/APKINDEX* \ && apk del --no-cache $BUILD_DEPS 可以与S3通信:

SqlContext

然而,从2.x开始,sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "blah1") sparkContext.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey", "blah 2") SparkContext似乎是由SqlContext构建的两个独立对象:

SparkSession

那么,如果val sparkContext = SparkSession.builder().appName("myapp").getOrCreate().sparkContext val sqlContext = SparkSession.builder().appName("myapp").getOrCreate().sqlContext sparkContext.hadoopConfiguration完全分开,如何为SQLContext设置SQLContext属性?

1 个答案:

答案 0 :(得分:1)

  

如果SQLContext与SparkContext完全分开?!

SparkSessionSQLContext都不与SparkContext分开。两者都与特定的SparkContext实例紧密绑定。使用Spark 2.x时,除了遗留应用程序之外,您还不需要SQLContext。对于其他所有内容SparkSession提供了等效的接口。

初始化SparkSession

val spark = SparkSession.builder().appName("myapp").getOrCreate()

并使用其上下文设置Hadoop配置

spark.sparkContext.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "blah1")

sparkContext上的代码设置配置中也可以使用。每个Spark应用程序只能有一个SparkContext,每次调用SparkSession.builder.getOrCreate时都会重复使用,或者即使您创建newSession