【问题标题】:Error in reading DynamoDB record from Spark从 Spark 读取 DynamoDB 记录时出错
【发布时间】:2016-10-06 16:41:25
【问题描述】:

我正在尝试使用 zeppelin 笔记本获取 data from DynamoDB with Apache Spark 来构建快速报告

计数运行良好,但除此之外我无法运行任何类似

orders.take(1).foreach(println)

失败并出现以下错误:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0.0 in stage 5.0 (TID 5) had a not serializable result: org.apache.hadoop.io.Text
Serialization stack:
- object not serializable (class: org.apache.hadoop.io.Text, value: )
- field (class: scala.Tuple2, name: _1, type: class java.lang.Object)
- object (class scala.Tuple2, (,{<<A rec from DynamoDB as JSON>>}))
- element of array (index: 0)
- array (class [Lscala.Tuple2;, size 7)

如何解决这个问题?我尝试对结果进行类型转换,但失败了:

 asInstanceOf[Tuple2[Text, DynamoDBItemWritable]

过滤器也是如此

 orders.filter(_._1 != null)

我打算将其转换为 DataFrame 以将其注册为临时表。然后我计划对此运行临时查询。

【问题讨论】:

    标签: scala amazon-web-services apache-spark amazon-dynamodb apache-zeppelin


    【解决方案1】:

    我不是一个完整的 Spark 专家,但我知道所有可能被并行化的东西都需要是可序列化的。我认为错误信息中可能有线索:

    object not serializable (class: org.apache.hadoop.io.Text, value: )
    

    快速检查该类的定义告诉我它可能不是:

    public class Text
        extends BinaryComparable
        implements WritableComparable<BinaryComparable>
    

    这可能会有所帮助:

    http://apache-spark-user-list.1001560.n3.nabble.com/How-to-solve-java-io-NotSerializableException-org-apache-hadoop-io-Text-td2650.html

    【讨论】:

    • 嗨@haggy,感谢您的回复。此处代码直接将 dynamoDB 表作为 hadoopRDD 读取。我没有阅读它然后将其作为可序列化对象实现的选项。我正在使用 aws 提供的 jar 与 DynamoDB 进行交互。
    【解决方案2】:

    orders.map(t => t._2.getItem()).collect.foreach(println)

    这个项目可以读取 DynamoDB 并从中创建 RDD/DataFrame。 https://github.com/traviscrawford/spark-dynamodb

    【讨论】:

      猜你喜欢
      • 2022-11-02
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2022-11-24
      • 2019-08-23
      • 2020-12-30
      • 2019-11-29
      • 2017-01-16
      相关资源
      最近更新 更多