我在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
答案 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
键,就可以通过public
从secret
读取数据。与通过S3 bucket
经过arrow
然后转换为pandas
相比,效率更高,因为您必须并行化串行读取。
spark dataframe
源文档=> https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#access-aws-s3-directly