从实木复合地板文件创建pyspark数据框

时间:2019-07-29 12:36:07

标签: pyspark parquet

我在pyspark方面还很陌生,但我仍在努力弄清楚谁能奏效。我想要做的是在使用pyarrow Itry将拼花文件加载到内存中后使其成为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

2 个答案:

答案 0 :(得分:0)

import pyspark
from pyspark.sql import SQLContext

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

这是您应该阅读镶木地板文件以激发df的方式:

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

答案 1 :(得分:0)

只要您拥有S3的{​​{1}}和Spark键,就可以通过publicsecret读取数据。与通过S3 bucket经过arrow然后转换为pandas相比,效率更高,因为您必须并行化串行读取。

spark dataframe

源文档=> https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#access-aws-s3-directly