Java.lang.UnsatisfiedLinkError в PySpark при записи в файл Parquet в WindowsPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Java.lang.UnsatisfiedLinkError в PySpark при записи в файл Parquet в Windows

Сообщение Anonymous »

Я написал следующий код:

Код: Выделить всё

from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType
import re
import os

os.environ['HADOOP_HOME'] = 'D:\\hadoop'
os.environ['PATH'] += os.pathsep + os.path.join(os.environ['HADOOP_HOME'], 'bin')
os.environ['PYSPARK_PYTHON'] = '(...entire path...)\\python.exe'
def clean_text(text):
text = text.strip('"')
text = text.replace('""', '"')
text = text.replace("\\n", "\n")
text = re.sub(r'\s+', ' ', text)
return text
spark = SparkSession.builder \
.appName("example") \
.config("spark.executor.memory", "4g") \
.config("spark.hadoop.fs.defaultFS", "file:///") \
.config("spark.hadoop.hadoop.tmp.dir", "file:/D:/hadoop/tmp") \
.getOrCreate()
spark_df = spark.read.csv('test.csv', inferSchema=True, header=False)
df_schema = ["A", "B", "D"]
spark_df = spark_df.toDF(*df_schema)
clean_text_udf = udf(clean_text, StringType())
spark_df = spark_df.dropna()
spark_df = spark_df.withColumn("C", clean_text_udf(col("D")))
spark_df = spark_df.drop("D")
spark_df.write.parquet('D:\\preprocessed_Dataset.parquet', mode='overwrite')
Я загрузил двоичный пакет Hadoop (версия 3.4.0) по ссылке https://hadoop.apache.org/releases.html и «winutils.exe» по https:// github.com/steveloughran/winutils/blob/master/hadoop-3.0.0/bin/winutils.exe, а затем поместил этот файл «winutils.exe» внутри D:\hadoop\bin.
Также я обновил содержимое «hdfs-site.xml» следующим образом:

Код: Выделить всё


dfs.replication
1


dfs.namenode.name.dir
file:/D:/hadoop/data/namenode


dfs.datanode.data.dir
file:/D:/hadoop/data/datanode


а также обновил содержимое файла «core-site.xml» следующим образом:

Код: Выделить всё


fs.defaultFS
file:///


hadoop.tmp.dir
file:/D:/hadoop/tmp


hadoop.proxyuser.hadoop.groups
*


hadoop.proxyuser.hadoop.hosts
*


Кроме того, я создал папки tmp, data\datanode и data\namenode в D:\hadoop, а также все переменные среды установлены правильно.
Моя версия Spark — 3.5. 1, и я использую PyCharm IDE
Но все равно получаю сообщение об ошибке:

Код: Выделить всё

spark_df.write.parquet('D:\\preprocessed_Dataset.parquet', mode='overwrite')
in parquet
self._jwrite.parquet(path)
in __call__
return_value = get_return_value(
^^^^^^^^^^^^^^^^^
in deco
return f(*a, **kw)
^^^^^^^^^^^
in get_return_value
raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling o66.parquet.
: java.lang.UnsatisfiedLinkError: 'boolean org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(java.lang.String, int)'
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:793)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1249)...
Пожалуйста, помогите с этим

Подробнее здесь: https://stackoverflow.com/questions/787 ... -on-window
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»