【问题标题】:Apache Ignite Spark Integration not working with Schema NameApache Ignite Spark 集成不使用模式名称
【发布时间】:2023-03-23 00:46:01
【问题描述】:

我正在使用 Apache Ignite Spark 连接器 (ignite-spark-2.7.5) 使用以下代码将我的 DataFrame 持久化到 Ignite 表。

val ignite = Ignition.start(CONFIG); 
  catalog_opportunities_agg.write 
    .format(FORMAT_IGNITE) 
    .option(OPTION_CONFIG_FILE, CONFIG) 
    .option(OPTION_TABLE, "s1.club") 
    .option("user", "ignite") 
    .option("password", "ignite") 
    .option(OPTION_CREATE_TABLE_PRIMARY_KEY_FIELDS, "club_id") 
    .option(OPTION_CREATE_TABLE_PARAMETERS, "template=replicated") 
    .mode(SaveMode.Overwrite) 
    .save() 
Ignition.stop(false);

该代码在公共架构上运行良好(没有提及架构名称),但一旦我将架构名称(s1)添加到它,它就会开始失败。

错误堆栈:

19/09/04 10:24:06 ERROR Executor: Exception in task 7.0 in stage 2.0 (TID 208) 
java.util.NoSuchElementException: None.get 
        at scala.None$.get(Option.scala:347) 
        at scala.None$.get(Option.scala:345) 
        at org.apache.ignite.spark.impl.QueryHelper$.org$apache$ignite$spark$impl$QueryHelper$$savePartition(QueryHelper.scala:155) 
        at org.apache.ignite.spark.impl.QueryHelper$$anonfun$saveTable$1.apply(QueryHelper.scala:117) 
        at org.apache.ignite.spark.impl.QueryHelper$$anonfun$saveTable$1.apply(QueryHelper.scala:116) 
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) 
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) 
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101) 
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101) 
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90) 
        at org.apache.spark.scheduler.Task.run(Task.scala:121) 
        at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408) 
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360) 
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
        at java.lang.Thread.run(Thread.java:748) 
19/09/04 10:24:06 ERROR Executor: Exception in task 1.0 in stage 2.0 (TID 202) 
java.util.NoSuchElementException: None.get 
        at scala.None$.get(Option.scala:347) 
        at scala.None$.get(Option.scala:345) 
        at org.apache.ignite.spark.impl.QueryHelper$.org$apache$ignite$spark$impl$QueryHelper$$savePartition(QueryHelper.scala:155) 
        at org.apache.ignite.spark.impl.QueryHelper$$anonfun$saveTable$1.apply(QueryHelper.scala:117) 
        at org.apache.ignite.spark.impl.QueryHelper$$anonfun$saveTable$1.apply(QueryHelper.scala:116) 
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) 
        at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) 
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101) 
        at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101) 
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90) 
        at org.apache.spark.scheduler.Task.run(Task.scala:121) 
        at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408) 
        at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360) 
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
        at java.lang.Thread.run(Thread.java:748) 
19/09/04 10:24:06 ERROR Executor: Exception in task 5.0 in stage 2.0 (TID 206)

请指出我做错了什么。

【问题讨论】:

    标签: apache-spark ignite


    【解决方案1】:

    我认为它不理解架构语法。而不是:

    .option(OPTION_TABLE, "s1.club") 
    

    尝试:

    .option(OPTION_SCHEMA, "s1") 
    .option(OPTION_TABLE, "club") 
    

    请注意,只要表名是唯一的,您就不需要指定架构:

    如果未指定,将扫描所有模式以查找与给定表名匹配的表名,并使用第一个匹配的表。当不同模式中的多个表具有相同的表名时,可以使用此选项来消除表的歧义。

    【讨论】:

    • 嗨,斯蒂芬,没有“OPTION_SCHEMA”选项。我需要在多个模式下具有相同的表名。请提出建议。
    • 在进一步调查中,OPTION_SCHEMA 似乎没有被 Ignite 2.7 淘汰(即使它在发布之前已被合并)。这就是 Ignite 2.8 的答案。
    • 感谢您的更新。万一它会成为 Ignite 2.7.6 的一部分,或者我必须等到 Ignite 2.8?
    • 你可以随时在开发者邮件列表中询问,但我不这么认为。
    • 谢谢。我在 JIRA 中提出了一个错误,让我们看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多