ฉันมีข้อมูล json บางส่วนที่เป็นคู่ของค่าคีย์โดยมี int เป็นคีย์และรายการ ints เป็นค่า ฉันต้องการอ่านข้อมูลนี้ลงในแผนที่แล้วออกอากาศเพื่อให้ RDD อื่นนำไปใช้ในการค้นหาอย่างรวดเร็ว
ฉันมีโค้ดที่ทำงานกับคลัสเตอร์ Spark 1.6.1 ที่อยู่ในศูนย์ข้อมูล แต่โค้ดเดียวกันนี้ใช้ไม่ได้กับคลัสเตอร์ Spark 2.0.1 ใน AWS รหัส 1.6.1 ที่ใช้งานได้:
import scala.collection.mutable.WrappedArray
sc.broadcast(sqlContext.read.schema(mySchema).json(myPath).map(r => (r.getInt(0), r.getAs[WrappedArray[Int]].toArray)).collectAsMap)
ฉันเป็น 2.0.1 ฉันได้ลองแล้ว:
val myData = sqlContext.read.schema(mySchema).json(myPath).map(r => (r.getInt(0), r.getSeq[Int].toArray))
สิ่งนี้ทำให้ฉันได้รับสิ่งที่ฉันต้องการ ณ จุดนี้:
org.apache.spark.sql.Dataset[(Int, Array[Int])] = [_1: int, _2: array<int>]
แต่แล้วเมื่อฉันทำ:
sc.broadcast(myData.rdd.collectAsMap)
ฉันเข้าใจ:
java.lang.ClassCastException: ไม่สามารถกำหนดอินสแตนซ์ของ scala.collection.immutable.List$SerializationProxy ให้กับฟิลด์ org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ ของประเภท scala.collection.Seq ในอินสแตนซ์ของ org.apache.spark.rdd.MapPartitionsRDD
ไม่มีใครรู้ว่าฉันสามารถทำได้ใน 2.0.1 อย่างไร มันเป็นเรื่องง่ายมากที่ฉันพยายามทำ
ขอบคุณล่วงหน้า,
โรบิน