从Azure Blob存储读取时,java.lang.NoSuchMethodError:org.apache.hado



我正在尝试读取存储在Azure存储帐户中的CSV文件。为此,我在虚拟机上安装了一个spark,并试图从pyspark读取数据帧中的CSV文件。

我在某个地方读到了如何做到这一点,并按照步骤复制了最新的hadoop azure&我/JAR目录上的azure存储JAR文件。然后,我出现了这个错误:-

NoClassDefFoundError:org/apache/hadop/fs/StreamCapabilities

我搜索了这个错误,发现我需要引用hadoop-azure-2.8.5.jar,而不是最新的hadoop-aureJAR。因此,我用最新的hadoopazurejar替换了这个JAR,并再次执行了我的pyspark代码。

在执行我的代码后,我遇到了另一个错误:-

:java.lang.NoSuchMethodError:org.apache.hadop.security.ProviderUtils.excludeCompatibleCredentialProviders(Lorg/apache/hadop/conf/Configuration;Ljava/lang/Class;(Lorg/apache/hodop/conf/Coonfiguration;

此外,下面是我的pyspark代码:-

from pyspark import SparkContext
from pyspark.sql import SparkSession
from pyspark.sql import Window
from pyspark.sql.types import *
from pyspark.sql.functions import *
spark = SparkSession.builder.getOrCreate()
storage_account_name = "<storage_account_name>"
storage_account_access_key = "<storage_account_access_key>"
spark.conf.set("fs.azure.account.key." + storage_account_name + ".blob.core.windows.net",storage_account_access_key)
spark._jsc.hadoopConfiguration().set("fs.wasbs.impl","org.apache.hadoop.fs.azure.NativeAzureFileSystem")
spark._jsc.hadoopConfiguration().set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem")
spark._jsc.hadoopConfiguration().set("fs.azure.account.key.my_account.blob.core.windows.net", "storage_account_access_key")

df = spark.read.format("csv").option("inferSchema", "true").load("wasbs://<container_name>@<storage_account_name>.blob.core.windows.net/<path_to_csv>/sample_file.csv")
df.show()

我搜索了这个,并尝试了各种hadoop azure JAR版本。对我有效的是hadoop-azure-2.7.0.jar

使用这个JAR版本,我能够从Blob存储中读取CSV文件。

最新更新