如何使用pyspark读取Excel文件?

N99*_*909 0 python pandas apache-spark apache-spark-sql pyspark

我正在尝试使用 AWS EMR 中的 Pyspark 读取驻留在 s3 的 Excel 文件,为了执行此操作,我下载了 Spark-Excel jarspark-excel_2.11-0.12.4.jar 和 Spark-excel_2.12-0.13.5 .jar 并放入 s3 存储桶中

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;)

Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?我感谢您的帮助 !

Kun*_*and 5

可以直接从excel中读取。事实上,这应该是比 pandas 更好的做法,因为 Spark 的好处将不再存在。

您可以运行与上面定义的相同的代码示例,但只需将所需的类添加到 SparkSession 的配置中即可。

spark = SparkSession.builder \
.master("local") \
.appName("Word Count") \
.config("spark.jars.packages", "com.crealytics:spark-excel_2.11:0.12.2") \
.getOrCreate()
Run Code Online (Sandbox Code Playgroud)

然后,你就可以读取你的excel文件了。

df = spark.read.format("com.crealytics.spark.excel") \
.option("useHeader", "true") \
.option("inferSchema", "true") \
.option("dataAddress", "NameOfYourExcelSheet") \
.load("your_file"))
Run Code Online (Sandbox Code Playgroud)

  • 我在将类添加到 Spark Session config("spark.jars.packages","com.crealytics:spark-excel_2.11-0.12.4") 后进行了测试,仍然有相同的错误,原因是:java.lang.NoClassDefFoundError :org/apache/commons/collections4/IteratorUtils。有什么想法吗 ? (3认同)