python - 无法从 Amazon EMR 的 pyspark 中的 hdfs 读取文件
问题描述
我正在尝试为 Amazon EMR 制作 python 程序,但我无法从其中的 hdfs 读取文件。我这样做是这样的:集群配置如下:发布:emr-5.25.0,hive 2.3.5,spark 2.4.3
起初,我从不在集群中的计算机启动 shell 脚本,如下所示:
aws emr add-steps ... --steps Type=CUSTOM_JAR .. Args=['s3://script.sh']
脚本在 s3 存储桶中。
执行一些检查并将文件从 s3 复制到集群的脚本,如下所示:
s3-dist-cp s3://some_file /mnt1/some_file
hdfs dfs -put /mnt1/some_file hdfs://home/hadoop/output/gzip
hdfs dfs -ls -h hdfs://home/hadoop/output/gzip (1)
然后脚本像这样启动python程序:
spark-submit ... --master yarn --deploy-mode cluster s3://script.py
在 python 程序中,我正在做这样的事情:
if __name__=="main":
subprocess.check_output("hdfs dfs -ls hdfs://home/hadoop/output/gzip") #(2)
sc = SparkContext()
f = sc.binaryFiles("hdfs://home/hadoop/output/gzip") #(3)
f.keys().foreach(some_fn)
我的问题是(1)工作正常并在 hdfs 中显示文件。(3) 也可以正常工作,但 (2) 不输出任何内容,说“[Errno 2] 没有这样的文件或目录”。
我想做的是修改python代码,因为据我了解,binaryFiles将文件内容加载到内存中并在节点之间拆分,但在这个任务中我只需要知道文件名。
解决方案
推荐阅读
- android - 如何为 espresso UI 测试调用 onStop
- android - 如何将网站与 Instant 应用的数字资产链接协议链接?
- c# - 使用带有 IOptions 的 Autofixture 测试控制器
作为构造函数参数 - vba - 在 for 循环中跳过迭代(VBA excel)
- html - 如何使图像占据屏幕的整个宽度?(HTML,CSS)
- arduino - Arduino 多定时器
- python - 如果单词有辅音,python函数删除元音
- php - 通过 CSV 文件更新表值,这是巨大的 PHP
- vim - 用命令输出替换视觉选择
- json - 在 docker-compose.yml 中传递 Json 文件内容