【问题标题】:Writing a dataframe in Parquet在 Parquet 中编写数据框
【发布时间】:2022-01-03 00:27:09
【问题描述】:

我正在尝试在 spark 中读取 json 并将其写回镶木地板。我在 Windows 中运行我的代码。下面是我的代码。执行后,它会创建一个名为 output_spark.parquet 的文件夹。它还会抛出找不到文件的错误。如果我创建一个文件然后运行它说该文件已经存在的代码。这是我得到的错误。

py4j.protocol.Py4JJavaError: 调用时出错 o34.镶木地板。 :java.lang.RuntimeException: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME 和 hadoop.home.dir 未设置

我需要文件编写器将镶木地板写入文件吗?感谢您可能拥有的任何代码 sn-ps。

    from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.read.json("Output.json")

df.show()

 
df.write.parquet("output_spark.parquet")

【问题讨论】:

    标签: python dataframe pyspark parquet


    【解决方案1】:

    在 Windows 上,Hadoop 需要本地代码扩展,以便它可以正确地与操作系统集成,以实现文件访问语义和权限等方面。如何解决这个问题?

    1. 从 Hadoop 重新分发中获取 WINUTILS.EXE 二进制文件。使用这个link

    2. 设置环境变量%HADOOP_HOME%指向包含WINUTILS.EXE的BIN目录上方的目录:在windows的搜索栏中搜索“EDIT USER VARIABLE”然后设置

    【讨论】:

    • 不,别担心,我们在这里分享知识,没有人开始专家,这不是您需要拥有 spark 必须指向的文件夹的义务。
    • 很抱歉删除了我的后续问题,我已经找到了 winutils 的答案...谢谢,现在就试试。
    • 对于你的第二个问题,尝试使用这个: df.write.format('parquet').mode('overwrite').save("output_spark.parquet") 你不会有问题(文件已存在)
    • 谢谢,该过程创建了一个名为 output_spark.parquet 的目录。下面是我得到的错误...................................................... .................................. 21/03/03 18:36:19 错误 FileFormatWriter:中止作业 cc2b4552 -dd54-494a-b262-7ee90ab8d85a。 java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z ......
    • 下载hadoop.dll并将其添加到winutils.exe所在的同一个文件夹,这里是链接github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/…
    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-03
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多