首页 > 解决方案 > 从 parquet 文件创建 pyspark 数据框

问题描述

我在 pyspark 中还很陌生,我仍在试图弄清楚谁在工作。我想要做的是在使用 pyarrow Itry 将 parquet 文件加载到内存中以使其成为 pyspark 数据帧之后。但我收到一个错误。

我应该提到我没有直接通过 pyspark 读取,因为 s3 中的文件给了我另一个关于“s3 方案没有文件系统”的错误, 所以我正在尝试解决。下面我有一个可重现的例子。

import pyarrow.parquet as pq
import s3fs
s3 = s3fs.S3FileSystem()

parquet_file=pq.ParquetDataset('s3filepath.parquet',filesystem=s3)

sc = SparkContext.getOrCreate()
spark = SparkSession(sc)
spark.createDataFrame(parquet_file)




------------------------------------------------------------------ 

TypeError                                 Traceback (most recent 
 call last)
<ipython-input-20-0cb2dd287606> in <module>
----> 1 spark.createDataFrame(pandas_dataframe)

/usr/local/spark/python/pyspark/sql/session.py in 
createDataFrame(self, data, schema, samplingRatio, verifySchema)
746             rdd, schema = 
self._createFromRDD(data.map(prepare), schema, samplingRatio)
747         else:
--> 748             rdd, schema = 
self._createFromLocal(map(prepare, data), schema)
749         jrdd = 
self._jvm.SerDeUtil.toJavaArray(rdd._to_java_object_rdd())
750         jdf = 
self._jsparkSession.applySchemaToPythonRDD(jrdd.rdd(), 
schema.json())

TypeError: 'ParquetDataset' object is not iterable

标签: pysparkparquet

解决方案


import pyspark
from pyspark.sql import SQLContext

sc = pyspark.SparkContext('local', "retail")
sqlC = SQLContext(sc)

这就是你应该如何阅读 parquet 文件来激发 df:

df = sqlC.read.parquet('path_to_file_or_dir')

推荐阅读