我有一个SAS表,我尝试用Spark读取它。我尝试像这样使用https://github.com/saurfang/spark-sas7bdat,但无法正常工作。
代码如下:
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format("com.github.saurfang.sas.spark").load("my_table.sas7bdat")
它返回此错误:
Py4JJavaError: An error occurred while calling o878.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.github.saurfang.sas.spark. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:635)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:190)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:174)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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.GatewayConnection.run(GatewayConnection.java:238)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.github.saurfang.sas.spark.DefaultSource
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:618)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:618)
at scala.util.Try$.apply(Try.scala:192)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at scala.util.Try.orElse(Try.scala:84)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:618)...
有什么想法吗?
答案 0 :(得分:2)
该软件包似乎未正确导入。运行--packages saurfang:spark-sas7bdat:2.0.0-s_2.10
或spark-submit
时必须使用pyspark
。参见:https://spark-packages.org/package/saurfang/spark-sas7bdat
您还可以从该页面下载JAR文件,并使用--jars /path/to/jar
答案 1 :(得分:0)
我尝试了以上两种方法,但对我却没有用,因为即使df.count()也无法访问数据框,并引发错误。我有一个5768 X 6432数据框。
解决方案: 使用您选择的定界符将sas7bdat转换为平面文件CSV或txt,我已经使用管道定界符在txt上完成了此操作,因为我的数据可能会有逗号。
阅读sas7bdat并使用它来获取架构。
df= spark.read.format("com.github.saurfang.sas.spark").load("PATH/SAS_DATA.sas7bdat")
vartype = df.schema
现在在读取txt文件时通过此架构
df2 = spark.read.format('csv').option('header','True').option('delimiter','|').schema(vartype).load("path/SAS_DATA.txt")
为我工作
答案 2 :(得分:0)
我刚刚在 R 中解决了这个问题,我敢打赌我的 2 美分在这里也是同样的问题。问题似乎是 com.github.saurfang.sas.spark
的正确存储库不可用/未指定。应该是 https://repos.spark-packages.org/
我们都被难住了,因为这里(和在 R 中)控制台的错误只是提供了一些信息并且与这部分有关
Failed to find data source: com.github.saurfang.sas.spark
当我在 cmd 中运行对 spark-submit 的 R 调用时(我使用的是 Windows),低头看,它显示了尝试从各种缓存和存储库下载 com.github.saurfang.sas.spark
的尝试,但是不是上面提到的那个..
因此解决了所有问题,导致调用和下载 spark 包(在 R 中使用 sparklyr)。
spark-submit2.cmd --driver-memory 32G --name sparklyr --class sparklyr.Shell --packages "saurfang:spark-sas7bdat:2.0.0-s_2.11" --repositories https://repos.spark-packages.org/ "...\sparklyr\java\sparklyr-2.0-2.11.jar" 8880 41823