gpt4 book ai didi

scala - 如何将未编译的 Spark Scala/spark-shell 代码作为 Dataproc 作业运行?

转载 作者:行者123 更新时间:2023-12-03 16:36:22 25 4
gpt4 key购买 nike

通常,如果我将 Scala 用于 Spark 作业,我将编译一个 jarfile 并使用 gcloud dataproc jobs submit spark 提交它。 ,但有时对于非常轻量级的工作,我可能会在笔记本中使用未编译的 Scala 代码或使用 spark-shell REPL,我假设 SparkContext 已经可用。

对于其中一些轻量级用例,我可以等效地使用 PySpark 并提交 gcloud dataproc jobs submit pyspark但有时我需要更轻松地访问 Scala/Java 库,例如直接创建 org.apache.hadoop.fs.FileSystem映射函数内部的对象。是否有任何简单的方法可以使用 Dataproc 作业 API 直接从命令行提交此类“spark-shell”等效作业?

最佳答案

目前,对于未编译的 Spark Scala 没有专门的顶级 Dataproc 作业类型,但在幕后,spark-shell只是使用与 spark-submit 相同的机制运行专门的 REPL 驱动程序:org.apache.spark.repl.Main .因此,将此与 --files 结合使用标志在 gcloud dataproc jobs submit spark 中可用,您可以只编写您可能已经在 spark-shell 中测试过的 Scala 片段。或笔记本 session ,并将其作为整个 Dataproc 作业运行,假设 job.scala是您机器上的本地文件:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files job.scala \
-- -i job.scala

就像任何其他文件一样,您也可以在 --files 中指定任何与 Hadoop 兼容的路径。参数也是如此,例如 gs://甚至 hdfs:// ,假设您已经放置了您的 job.scala文件在那里:
gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files gs://${BUCKET}/job.scala \
-- -i job.scala

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files hdfs:///tmp/job.scala \
-- -i job.scala

如果您已通过 init 操作将作业文件暂存到 Dataproc 主节点上,则可以使用 file:///指定在集群的本地文件系统上找到该文件,而不是在运行 gcloud 的本地文件系统上找到该文件:
gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files file:///tmp/job.scala \
-- -i job.scala

请注意,在所有情况下,该文件都将成为主驱动程序作业工作目录中的本地文件,因此“-i”的参数可以只是文件名的相对路径。

关于scala - 如何将未编译的 Spark Scala/spark-shell 代码作为 Dataproc 作业运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60592577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com