我正在尝试下载Hadoop文件(我的hadoop数据在Azure数据湖中)。在以下脚本中使用过,但是我遇到了JVM错误。有什么帮助吗?
sc = spark.sparkContext
URI = sc._gateway.jvm.java.net.URI
hadoop = sc._gateway.jvm.org.apache.hadoop
conf = hadoop.conf.Configuration()
fs = hadoop.fs.FileSystem.get(URI('adl://abcaccount.azuredatalakestore.net'), conf)
hadoop.fs.FileSystem.copyToLocalFile('/test/test_merge.txt','/tmp/')
错误:
Py4JError:JVM中不存在org.apache.hadoop.fs.FileSystem.copyToLocalFile
注意:我尝试了我现在不想使用的python子进程。
最佳答案
我在官方文档 What are the Apache Hadoop components and versions available with HDInsight?
中检查了Hadoop版本的Azure HDInsight的不同版本,如下图所示。
HDInsight 3.5、3.6和4.0使用Apache Hadoop版本2.7.3和3.1.1。
我查看了Apache Hadoop的javadocs中的API org.apache.hadoop.fs.FileSystem.copyToLocalFile
API,然后发现存在三种具有不同参数的类型函数copyToLocalFile
,如下图所示。
图1. Apache Hadoop版本r2.7.3的三个API copyToLocalFile
的javadocs的屏幕截图
图1. Apache Hadoop版本r3.1.1的三个API copyToLocalFile
的javadocs的屏幕截图
同时,其他Java程序员在使用copyToLocalFile NullPointerException
时遇到了copyToLocalFile(Path src, Path dst)
问题(似乎与您的错误相同),并通过切换到其他两个API copyToLocalFile(boolean delSrc, Path src, Path dst)
和copyToLocalFile(boolean delSrc, Path src, Path dst, boolean useRawLocalFileSystem)
来解决此问题。
因此,我认为您可以尝试使用hadoop.fs.FileSystem.copyToLocalFile(False, '/test/test_merge.txt','/tmp/')
或hadoop.fs.FileSystem.copyToLocalFile(False, '/test/test_merge.txt','/tmp/', true)
代替当前使用的。
希望能帮助到你。
关于azure - Hadoop API使用pyspark下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58700127/