Ausgabe
Ich habe diesen Code ausgeführt und habe einen Fehler.
import pandas as pd
from pyspark.sql import SparkSession
spark = SparkSession.builder.\
config("spark.jars.repositories", "https://repos.spark-packages.org/").\
config("spark.jars.packages", "saurfang:spark-sas7bdat:2.0.0-s_2.11,org.apache.hadoop:hadoop-aws:2.7.0").\
enableHiveSupport().getOrCreate()
df_spark_temp = spark.read.format('com.github.saurfang.sas.spark').load('18-83510-I94-Data-2016/i94_apr16_sub.sas7bdat')
df_spark_temp.limit(5).toPandas().show()
py4j.protocol.Py4JJavaError: An error occurred while calling o34.load.
: java.lang.NoClassDefFoundError: scala/Product$class
at com.github.saurfang.sas.spark.SasRelation.<init>(SasRelation.scala:48)
at com.github.saurfang.sas.spark.SasRelation$.apply(SasRelation.scala:42)
at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:50)
at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:39)
at com.github.saurfang.sas.spark.DefaultSource.createRelation(DefaultSource.scala:27)
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:350)
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:228)
at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:210)
at scala.Option.getOrElse(Option.scala:189)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:210)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:185)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:282)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)
at py4j.ClientServerConnection.run(ClientServerConnection.java:106)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: scala.Product$class
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 23 more
Python-Version: 3.9.6
JAVA-Version: 17.0.4.1
Pyspark-Version: 3.3
Ich habe im Stapelüberlauf nach denselben Problemen gesucht, und die meisten von ihnen sagten, dass dies möglicherweise an der Scala-Version liegt.
Ich habe scala noch nicht installiert, muss ich scala installieren oder kann ich die Einstellung in JAVA ändern?
Und ich tippe PySpark –version ein und es wird angezeigt
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.3.0
/_/
Using Scala version 2.12.15, Java HotSpot(TM) 64-Bit Server VM, 17.0.4.1
Bedeutet das, dass ich scala Version 2.12.15 installieren muss oder bereits installiert habe?
Lösung
Alle Bibliotheken müssen für dieselbe Scala-Version kompiliert werden, mit der Sie arbeiten.
spark-sas7bdat:2.0.0-s_2.11
Ich bin mit PySpark nicht vertraut, aber ich sehe, dass es aufgrund seiner Versionsnummer zumindest für Scala 2.11 kompiliert zu sein scheint.
Wenn Sie mit Scala 2.12 arbeiten, suchen Sie spark-sas7bdat:3.0.0-s_2.12
stattdessen nach using.
Persönliche Anmerkung: Diese Bibliothek scheint überhaupt nicht gepflegt zu werden, erwägen Sie die Verwendung einer anderen, wenn dies für Produktionscode ist.
Beantwortet von – Gaël J
Antwort geprüft von – Katrina (FixError Volunteer)