从 Spark 读取 DynamoDB 记录时出错
Error in reading DynamoDB record from Spark
我正在尝试使用 zeppelin notebook fetching 构建快速报告 data from DynamoDB with Apache Spark
计数是 运行ning 很好,但除此之外我无法 运行 任何类似
的东西
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 以将其注册为临时文件 table。然后我计划 运行 对此进行临时查询。
我不是一个完整的 Spark 专家,但我知道所有可能被并行化的东西都需要是可序列化的。我认为错误消息中可能有线索:
object not serializable (class: org.apache.hadoop.io.Text, value: )
快速检查 class 的定义告诉我它可能不是:
public class Text
extends BinaryComparable
implements WritableComparable<BinaryComparable>
这可能有帮助:
orders.map(t => t._2.getItem()).collect.foreach(println)
此项目可以读取 DynamoDB 并从中创建 RDD/DataFrame。
https://github.com/traviscrawford/spark-dynamodb
我正在尝试使用 zeppelin notebook fetching 构建快速报告 data from DynamoDB with Apache Spark
计数是 运行ning 很好,但除此之外我无法 运行 任何类似
的东西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 以将其注册为临时文件 table。然后我计划 运行 对此进行临时查询。
我不是一个完整的 Spark 专家,但我知道所有可能被并行化的东西都需要是可序列化的。我认为错误消息中可能有线索:
object not serializable (class: org.apache.hadoop.io.Text, value: )
快速检查 class 的定义告诉我它可能不是:
public class Text
extends BinaryComparable
implements WritableComparable<BinaryComparable>
这可能有帮助:
orders.map(t => t._2.getItem()).collect.foreach(println)
此项目可以读取 DynamoDB 并从中创建 RDD/DataFrame。 https://github.com/traviscrawford/spark-dynamodb