我正在尝试使用aws emr中的pyspark来读取它驻留在s3中的excel文件,为此我下载了spark-excel jars spark-excel_2.11-0.12.4.jar和spark-excel_2.12-0.13.5.jar,并将其放入s3 bucket中
scenario 1:
===========
df = spark.read.format("com.crealytics.spark.excel").option("useHeader", "true").option("inferschema", "true").load("s3://bucket/abc.xlsx")
spark-submit --jars s3://Bucket/spark-excel_2.11-0.12.4.jar test.py
Error:
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/collections4/IteratorUtils
scenario2:
=========
df = spark.read.format("com.crealytics.spark.excel").option("header", "true").option("inferschema", "true").load("s3://bucket/abc.xlsx")
spark-submit --jars s3://Bucket/spark-excel_2.12-0.13.5.jar test.py
Error:
py4j.protocol.Py4JJavaError: An error occurred while calling o79.load.
: java.lang.NoSuchMethodError: scala.Product.$init$(Lscala/Product;)
有人能帮我解决这个问题吗?谢谢你的帮助!
2条答案
按热度按时间2hh7jdfx1#
您可以直接从excel中读取。事实上,这应该是一个比Pandas更好的做法,因为从那时起,星火的好处将不复存在。
您可以运行与上面定义的相同的代码示例,但只需将所需的类添加到sparksession的配置中。
然后,您可以读取excel文件。
dy1byipe2#
可能excel文档可以放入驱动程序的内存中。在这种情况下,我将使用pandas直接从s3中读取文件,然后创建一个sparkDataframe来读取它。尝试以下操作:
编辑:
这种建议的方法只适用于极少数您可能希望与其他Dataframe连接的文件。如果您的大数据集来自xlsx文件,我建议您遵循
com.crealytics.spark.excel
解决方案。然而,我更担心的是在第一时间使用excel格式。