我正在尝试将我的 Spark Scala 脚本(spark-shell
用spark-submit
. 我使用 Spark SQL 进行了很多调用,这些调用执行了大量关于时区的时间戳计算。我必须明确设置以下配置(因为每个分布式节点可能配置了不同的默认时区),以确保我的时区始终为 UTC,以便通过该方法中的任何 Spark SQL 函数调用(代码块)进行任何后续 Spark SQL 时间戳操作。
spark.conf.set("spark.sql.session.timeZone", "UTC")
如果该方法签名包含 (spark: org.apache.spark.sql.SparkSession) 作为参数,那么我总是可以从将时区设置为 UTC 的显式代码语句开始,SparkSession
而不用冒险(所有分布式 Spark 节点可能有也可能没有完全相同的时区配置)?
我遇到的下一个问题是,我如何确定由 设置的“spark”变量spark-shell
是 aval
还是var
?在寻找这个问题的答案时,我找到了这个代码片段,希望找出这个 Scala 变量是immutable
还是mutable
. 但它没有告诉我 Scala 变量spark
是 avar
还是 a val
。设置为后是否需要返回spark
到方法调用者spark.sql.session.timeZone
,UTC
因为我在我的方法中对其进行了修改?目前我的方法签名需要两个输入参数(org.apache.spark.sql.SparkSession, org.apache.spark.sql.DataFrame)
,输出是一个 tuple (org.apache.spark.sql.SparkSession, org.apache.spark.sql.DataFrame)
。
scala> def manOf[T: Manifest](t: T): Manifest[T] = manifest[T]
manOf: [T](t: T)(implicit evidence$1: Manifest[T])Manifest[T]
scala> manOf(List(1))
res3: Manifest[List[Int]] = scala.collection.immutable.List[Int]
scala> manOf(spark)
res2: Manifest[org.apache.spark.sql.SparkSession] = org.apache.spark.sql.SparkSession
额外上下文:作为启动spark-shell
的一部分,变量spark
初始化如下:
Spark context available as 'sc' (master = yarn, app id = application_1234567890_111111).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.4.4
/_/
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_REDACTED)
Type in expressions to have them evaluated.
Type :help for more information.