我拼命想在Sparklyr中改变我的JVM的时区(使用spark 2.1.0
)。我到处都想要GMT
。
我正在设置:
config$`driver.extraJavaOptions` <-"Duser.timezone=GMT"
在我的spark_config()
文件中但不幸的是,在Spark UI中我仍然看到(在系统属性下)user.timezone
设置为America/New_York
。
有任何想法吗?谢谢!
一些东西:
spark.driver.extraJavaOptions
。-
的价值。应该是-Duser.timezone=GMT
。spark.driver.extraJavaOptions
和spark.executor.extraJavaOptions
。spark.driver.extraJavaOptions
和类似属性。如the official documentation所述:
在客户端模式下,不能直接在应用程序中通过SparkConf设置此配置,因为驱动程序JVM已在此时启动。相反,请通过--driver-java-options命令行选项或在默认属性文件中设置它。
在司机调用corresponding Java methods应该工作
# sc is spark_shell_connection / spark_connection
sparklyr::invoke_static(sc, "java.util.TimeZone", "getTimeZone", "GMT") %>%
sparklyr::invoke_static(sc, "java.util.TimeZone", "setDefault", .)
但可能没有反映在UI中,你仍然需要spark.executor.extraJavaOptions
。在一般情况下,您应该在配置目录中编辑spark-defualts.conf
以包含
spark.driver.extraJavaOptions -Duser.timezone=GMT
spark.executor.extraJavaOptions -Duser.timezone=GMT
如果您无法修改主配置,您可以创建一个特定于应用程序的目录,并使用SPARK_CONF_DIR
环境变量指向它。
在最近的版本中,您还可以在应用程序本身中设置spark.sql.session.timeZone
(请注意,它与相应的JVM选项不同,仅影响Spark查询)。