[英]“User did not initialize spark context” Error when using Scala code in SPARK YARN Cluster mode
[英]Read local/linux files in Spark Scala code executing in Yarn Cluster Mode
如何在 Yarn Cluster 模式下访问和读取 Spark 中执行的本地文件数据。
local/linux file: /home/test_dir/test_file.csv
spark-submit --class "" --master yarn --deploy_mode cluster --files /home/test_dir/test_file.csv test.jar
读取 csv 的 Spark 代码:
val test_data = spark.read.option("inferSchema", "true").option("header", "true).csv("/home/test_dir/test_file.csv")
val test_file_data = spark.read.option("inferSchema", "true").option("header", "true).csv("file:///home/test_dir/test_file.csv")
上述示例 spark-submit 失败并出现本地文件未找到错误 (/home/test_dir/test_file.csv)
Spark 默认检查 hdfs:// 中的文件,但我的文件在本地,不应复制到 hfds 中,应仅从本地文件系统读取。
有什么建议可以解决这个错误吗?
使用file://
前缀将从 YARN 节点管理器文件系统中提取文件,而不是从您提交代码的系统中提取文件。
要访问您的--files
使用csv("#test_file.csv")
不应复制到 hdfs
使用--files
会将文件复制到由 YARN 执行程序挂载的临时位置,您可以从 YARN UI 中看到它们
以下解决方案对我有用:
local/linux file: /home/test_dir/test_file.csv
spark-submit --class "" --master yarn --deploy_mode cluster --files /home/test_dir/test_file.csv test.jar
要访问在 spark-submit 中传递的文件:
import scala.io.Source
val lines = Source.fromPath("test_file.csv").getLines.toString
不要指定完整路径,而只指定我们要读取的文件名。 由于 spark 已经跨节点复制文件,我们可以仅使用文件名访问文件数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.