当前位置: 首页 > 知识库问答 >
问题:

从Spark连接到SAPHANA

郁高韵
2023-03-14

我正在尝试通过JAVA代码在SAP HANA上使用火花SQL执行查询。在对数据帧对象调用任何操作时,当调用 df.count(); 时,我在代码段下方得到 java.io.NotSerializableException.In,不会引发可序列化异常。

public class SaphanaTest implements Serializable {

    private static final long serialVersionUID = 1L;

    public void call() {

        SparkConf sparkconf = new SparkConf().set("spark.master", "local[*]");

        SparkContext sc = new SparkContext(sparkconf);
        HiveContext sqlContext = new HiveContext(sc);

        try {
            Class.forName("com.sap.db.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Map<String, String> options = new HashMap<String, String>();
        options.put("url",
                "jdbc:sap://<IP>:30015/system");
        options.put("user", "SYSTEM");
        options.put("password", "Saphana123");
        options.put("dbtable", "SYSTEM.TEST1");

        DataFrame df = sqlContext.load("jdbc", options);

        df.registerTempTable("temp");
        df = sqlContext.sql("select * from temp");

        long count = df.count();
        sc.stop();
    }

    public static void main(String[] args) {
        SaphanaTest test = new SaphanaTest();
        test.call();
}
}

错误堆栈跟踪:

线程“main”org.apache.spark中出现异常。SparkException:位于org.apache.spark.util.ClosureCleaner$.ensureSerializable(ClosureCleaner.scala:315)的org.apacher.sark.util.ClosureCleaner$.org$apache$spark$util$ClosuleCleaner$$clean(Closulecleaner.scala:305)位于org.apache.sark.rdd.rdd$$anonfun$toLocalIterator$1.org$apache$spark$rdd$rdd$$annofun$$collectPartition$1(rdd.scala:900)位于org.apacher.sark.rdd$anonfun$tolocalIteratr$1$$annfun$apply$30.apply(rdd.scala:902)位于org.apache.rdd.rdd$ananofun$1$toLocal Iterator$1$$$anon fun$apply$30.apply(rdd.scala:902)scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)位于com.ipopure.saphana.SaphanTest.main(SaphanaTest.java:48)的scala.ccollection.convert.Wrappers$IterattorWrapper.hasNext(Wrappers.scala:29)。NotSerializableException:com.sap.db.jdbc.topology。主机序列化堆栈:-对象不可序列化(类:com.sap.db.jdbc.topology.Host,值:172.26.52.54:30015)-writeObject数据(类:java.util.ArrayList)-object(类java.util.ArrayList,[172.26.52.55:30015])-write对象数据(类java.jutil.Hashtable)-obObject(类java.util.Properties,{dburl=jdbc:sap://172.26.52.54:30015,user=SYSTEM,password=Saphana123,url=jdbc:sap://172.26.52.54:30015/?system

有什么建议吗?在google上做了研究后,我发现了一个使连接属性可序列化的建议。但是我不知道如何在spark中将它序列化。

感谢您对此的帮助。提前感谢您。

共有1个答案

乌翔
2023-03-14

这篇博文的注释部分解决了我的问题,你也可以试试:

注意:我已经使用最新的 SPS12 版本的哈纳 JDBC 驱动程序 (ngdbc.jar) 针对 SPS10 测试了火花

 类似资料:
  • 我遇到了从一个火花运行的AWS EMR集群连接到另一个立即运行的AWS EMR集群的问题。 用python编写的代码是: 通过aws

  • 我试图连接到使用火花minio提供的s3,但它是说桶迷你库不存在。( 我正在使用以下指南进行连接。 https://github.com/minio/cookbook/blob/master/docs/apache-spark-with-minio.md 这些是我在scala中使用的依赖项。 "org.apache.spark " %% "spack-core"%"2.4.0","org.apac

  • 我正试图按照官方文档设置一个Spark独立集群。 我的主人在一个运行ubuntu的本地vm上,我也有一个工作人员在同一台机器上运行。它是连接的,我能够在大师的WebUI中看到它的地位。 以下是WebUi图像- 我已经在两台机器上的/etc/hosts中添加了主IP地址和从IP地址。我遵循了SPARK+独立集群中给出的所有解决方案:无法从另一台机器启动worker,但它们对我不起作用。 我在两台机器

  • 我正在尝试将spark连接到pyspark中的oracle数据库,但我遇到了驱动程序错误,请任何人帮我解决这个问题。我刚接触Spark,刚刚开始学习。下面是我的代码, 下面是错误, 文件“C:/Users/Macaulay/PycharmProjects/Spark/SparkSqlOracle.py”,第8行,在OrcDb=SqlContext中。阅读格式('jdbc')\文件“C:\Hadoo

  • 我试图使用带有Datastax Spark-Cassandra连接器的Spark查询Cassandra。火花代码是 我发现了另一个帖子,看起来类似的火花工作卡珊德拉错误,但它是一个不同的类,无法找到,所以我不确定它是否有帮助。

  • 我有一台安装了Hadoop和Spark的机器。下面是我目前的环境。 Python3.6 /root/.ipython/profile_pyspark/startup/00-pyspark-setup.py /root/anaconda3/share/jupyter/kernels/pyspark/kernel.json kernel.json 所以,由于sc无法初始化,如果我想运行以下操作,它失败