Код: Выделить всё
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')
Также я обновил содержимое «hdfs-site.xml» следующим образом:
Код: Выделить всё
dfs.replication
1
dfs.namenode.name.dir
file:/D:/hadoop/data/namenode
dfs.datanode.data.dir
file:/D:/hadoop/data/datanode
Код: Выделить всё
fs.defaultFS
file:///
hadoop.tmp.dir
file:/D:/hadoop/tmp
hadoop.proxyuser.hadoop.groups
*
hadoop.proxyuser.hadoop.hosts
*
Моя версия 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