簡體   English   中英

序列化RDD

[英]Serializing RDD

我有一個RDD,我試圖序列化,然后通過反序列化重建。 我試圖看看Apache Spark中是否可行。

     static JavaSparkContext sc = new JavaSparkContext(conf);
        static SerializerInstance si = SparkEnv.get().closureSerializer().newInstance();
    static ClassTag<JavaRDD<String>> tag = scala.reflect.ClassTag$.MODULE$.apply(JavaRDD.class);
..
..
            JavaRDD<String> rdd = sc.textFile(logFile, 4);
            System.out.println("Element 1 " + rdd.first());
            ByteBuffer bb= si.serialize(rdd, tag);
            JavaRDD<String> rdd2 = si.deserialize(bb, Thread.currentThread().getContextClassLoader(),tag);
            System.out.println(rdd2.partitions().size());
            System.out.println("Element 0 " + rdd2.first());

當我對新創建的RDD執行操作時,我在最后一行得到一個例外。 我序列化的方式類似於Spark內部的方式。

Exception in thread "main" org.apache.spark.SparkException: RDD transformations and actions can only be invoked by the driver, not inside of other transformations; for example, rdd1.map(x => rdd2.values.count() * x) is invalid because the values transformation and count action cannot be performed inside of the rdd1.map transformation. For more information, see SPARK-5063.
    at org.apache.spark.rdd.RDD.sc(RDD.scala:87)
    at org.apache.spark.rdd.RDD.take(RDD.scala:1177)
    at org.apache.spark.rdd.RDD.first(RDD.scala:1189)
    at org.apache.spark.api.java.JavaRDDLike$class.first(JavaRDDLike.scala:477)
    at org.apache.spark.api.java.JavaRDD.first(JavaRDD.scala:32)
    at SimpleApp.sparkSend(SimpleApp.java:63)
    at SimpleApp.main(SimpleApp.java:91)

RDD是在同一進程中創建和加載的,所以我不明白這個錯誤是如何發生的。

我是這條警告信息的作者。

Spark不支持對通過反序列化創建的RDD副本執行操作和轉換。 RDD是可序列化的,因此可以在執行程序中調用它們上的某些方法,但最終用戶不應嘗試手動執行RDD序列化。

當RDD被序列化時,它會丟失對創建它的SparkContext的引用,從而阻止使用它啟動作業(參見此處 )。 在早期版本的Spark中,當Spark嘗試訪問私有的null RDD.sc字段時,您的代碼將導致NullPointerException。

此錯誤消息的措辭是這樣的,因為用戶在嘗試執行諸如rdd1.map { _ => rdd2.count() }操作時經常遇到混淆NullPointerExceptions,這導致在執行程序機器上的反序列化RDD上調用操作。 我沒想到有人會嘗試在驅動程序上手動序列化/反序列化他們的RDD,所以我可以看到這個錯誤消息可能會有些誤導。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM