【问题标题】:How can I write a parquet file using Spark (pyspark)?如何使用 Spark (pyspark) 编写镶木地板文件?
【发布时间】:2017-06-20 17:52:27
【问题描述】:

我是 Spark 的新手,我一直在尝试将 Dataframe 转换为 Spark 中的 parquet 文件,但还没有成功。 documentation 说我可以使用 write.parquet 函数来创建文件。但是,当我运行脚本时,它显示:AttributeError: 'RDD' object has no attribute 'write'

from pyspark import SparkContext
sc = SparkContext("local", "Protob Conversion to Parquet ")

# spark is an existing SparkSession
df = sc.textFile("/temp/proto_temp.csv")

# Displays the content of the DataFrame to stdout
df.write.parquet("/output/proto.parquet")

你知道怎么做吗?

我使用的 spark 版本是为 Hadoop 2.7.3 构建的 Spark 2.0.1。

【问题讨论】:

  • sc.textFile() 返回RDD
  • 是的,我刚刚意识到。我刚改成 SparkSession 而不是 SparkContext

标签: python pyspark spark-dataframe


【解决方案1】:

错误是由于SparkContext 中的textFile 方法返回了RDD 而我需要的是DataFrame

SparkSession 在后台有一个SQLContext。所以我需要使用DataFrameReader 正确读取CSV 文件,然后再将其转换为parquet 文件。

spark = SparkSession \
    .builder \
    .appName("Protob Conversion to Parquet") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

# read csv
df = spark.read.csv("/temp/proto_temp.csv")

# Displays the content of the DataFrame to stdout
df.show()

df.write.parquet("output/proto.parquet")

【讨论】:

  • 即使你的代码是正确的,你的解释也不正确。 SparkContext 不会将 CSV 文件转换为 RDD。 SparkContext 中的textFile 方法返回一个RDD,您需要的是一个DataFrame,因此是一个SQLContext 或一个HiveContext,它也封装在spark 2+ 中的SparkSession 中,您是否关心更正该信息和接受答案以结束问题?
  • 感谢@eliasah 的反馈!
  • 答案是数据框。如何以 parquet 格式编写 rdd?
  • df.write.parquet 将文件夹作为参数,而不是其绝对路径。
  • @eliasah 您的评论是否意味着对于 spark 2+ 我们只需要以下两行即可将 csv 转换为 Parquet:df = spark.read.parquet("/path/to/infile.csv") df.write.csv("/path/to/outfile.parquet" 我做对了吗?跨度>
【解决方案2】:

您还可以使用koalas 从 Spark 中写出 Parquet 文件。这个库非常适合喜欢 Pandas 语法的人。 Koalas 是底层的 PySpark。

这是考拉代码:

import databricks.koalas as ks

df = ks.read_csv('/temp/proto_temp.csv')
df.to_parquet('output/proto.parquet')

【讨论】:

  • 嗨@Powers,我在使用AWS EMR 时尝试安装它sc.install_pypi_package("koalas") #Install latest koalas version。但是,当我尝试导入它时,它说No module named 'koalas'
  • @Sowmya - 此链接说明了如何在 EMR 环境中安装 pypi 包:docs.aws.amazon.com/emr/latest/ReleaseGuide/…。希望有帮助!
  • 谢谢。你真的很高兴回复我的评论。我知道该链接不是进行系统安装,而是更多地考虑本地或笔记本特定的安装。好吧,如果本地的不起作用,那就去安装系统。
猜你喜欢
  • 2017-08-16
  • 2019-01-17
  • 1970-01-01
  • 2017-04-14
  • 2018-08-13
  • 2019-06-02
  • 2021-03-15
  • 2022-06-16
  • 2019-11-27
相关资源
最近更新 更多