【问题标题】:How do I read a parquet in PySpark written from Spark?如何在 PySpark 中读取从 Spark 编写的镶木地板?
【发布时间】:2017-08-16 21:38:38
【问题描述】:

我正在使用两个 Jupyter 笔记本在分析中做不同的事情。在我的 Scala 笔记本中,我将一些清理过的数据写入 parquet:

partitionedDF.select("noStopWords","lowerText","prediction").write.save("swift2d://xxxx.keystone/commentClusters.parquet")

然后我去我的 Python notebook 读入数据:

df = spark.read.load("swift2d://xxxx.keystone/commentClusters.parquet")

我收到以下错误:

AnalysisException: u'Unable to infer schema for ParquetFormat at swift2d://RedditTextAnalysis.keystone/commentClusters.parquet. It must be specified manually;'

我查看了 spark 文档,我认为我不应该被要求指定架构。有没有人遇到过这样的事情?保存/加载时我应该做其他事情吗?数据正在登陆对象存储。

编辑: 我在读取和写入时都在唱 spark 2.0。

编辑2: 这是在 Data Science Experience 中的一个项目中完成的。

【问题讨论】:

  • 这是一个gist,用于将 DataFrame 作为 parquet 文件写入/读取到 Swift。它使用一个简单的模式(所有“字符串”类型)。您的 DataFrame 的架构是什么? Spark 尝试推断架构,但“目前支持数字数据类型和字符串类型”(请参阅​​spark.apache.org/docs/latest/…
  • 我相信你当时回答了我的问题! “noStopWords”列是一个词向量。如何使用此列保存/加载 df?

标签: python scala apache-spark pyspark data-science-experience


【解决方案1】:

我通过以下方式读取拼花文件:

from pyspark.sql import SparkSession
# initialise sparkContext
spark = SparkSession.builder \
    .master('local') \
    .appName('myAppName') \
    .config('spark.executor.memory', '5gb') \
    .config("spark.cores.max", "6") \
    .getOrCreate()

sc = spark.sparkContext

# using SQLContext to read parquet file
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

# to read parquet file
df = sqlContext.read.parquet('path-to-file/commentClusters.parquet')

【讨论】:

    【解决方案2】:

    您可以使用 Spark Session 的parquet 格式来读取 parquet 文件。像这样:

    df = spark.read.parquet("swift2d://xxxx.keystone/commentClusters.parquet")
    

    虽然parquetload 函数之间没有区别。可能是load 无法推断文件中数据的架构(例如,某些数据类型无法被load 识别或特定于parquet)。

    【讨论】:

    • 感谢您的反馈,但最终还是出现了同样的错误。我会继续尝试其他的。
    • 这里有一个教程:datascience.ibm.com/blog/…
    猜你喜欢
    • 2017-06-20
    • 1970-01-01
    • 2022-06-16
    • 2017-01-22
    • 1970-01-01
    • 2021-11-10
    • 2018-08-13
    • 2023-03-05
    • 2021-08-26
    相关资源
    最近更新 更多