java.lang.NoSuchMethodError: org.apache.hadoop.security.ProviderUtils.excludeIncompatibleCredentialProviders while reading from Azure Blob Storage

java.lang.NoSuchMethodError: org.apache.hadoop.security.ProviderUtils.excludeIncompatibleCredentialProviders while reading from Azure Blob Storage

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

我在某处读到如何执行此操作,然后按照步骤将最新的 hadoop-azure 和 azure-storage JAR 文件复制到我的 /jar 目录中。然后,我想出了这个错误:-

NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities

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

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

: java.lang.NoSuchMethodError: org.apache.hadoop.security.ProviderUtils.excludeIncompatibleCredentialProviders(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/Class;)Lorg/apache/hadoop/conf/Configuration;

此外,下面是我的 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 文件。