【问题标题】:Why does using combinations give "java.io.NotSerializableException: scala.collection.TraversableOnce$FlattenOps$$anon$1"?为什么使用组合会给出“java.io.NotSerializableException: scala.collection.TraversableOnce$FlattenOps$$anon$1”?
【发布时间】:2017-10-04 23:33:35
【问题描述】:

问题:

我有Array[Array[String]] 形式的RDD,我需要内部数组中的字符串组合。但是当我应用地图功能时,我收到以下错误

java.io.NotSerializableException: scala.collection.TraversableOnce$FlattenOps$$anon$1
Serialization stack:
    - object not serializable (class: scala.collection.TraversableOnce$FlattenOps$$anon$1, value: non-empty iterator)
    - element of array (index: 0)
    - array (class [Lscala.collection.Iterator;, size 10)
    at org.apache.spark.serializer.SerializationDebugger$.improveException(SerializationDebugger.scala:40)
    at org.apache.spark.serializer.JavaSerializationStream.writeObject(JavaSerializer.scala:46)
    at org.apache.spark.serializer.JavaSerializerInstance.serialize(JavaSerializer.scala:100)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:324)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

背景:

最初我有以下内容:

Array[org.apache.spark.sql.Row] = Array([cyber crimes ;; cyber security ;; review ;; india ;; instances ;; state ;; issue], [civil rights ;; case ;; instances ;; frequency])

当我用以下代码清理它时:

words.map(r => r(0).asInstanceOf[String].split("\\;;").map(_.trim))

结果如下:

Array[Array[String]] = Array(Array(cyber crimes, cyber security, review, india, instances, state, issue), Array(civil society, instances, frequency))

现在我需要数组中所有可能的字符串组合,例如:

Array[Array[String]] = Array(Array((cyber crimes, cyber security), (review, india), (instances, state), (issue,cyber crimes))....etc)

当我在此应用map 时,它给了我上述错误:

val combinations = cleanwords.map(r => r(0).asInstanceOf[String].combinations(2))

谁能帮我得到这个想要的结果?

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    错误的发生可能是因为试图收集元素为迭代器的 rdd(由combinations 生成)。此外,您需要直接在数组上使用combinations

    cleanwords.map(_.combinations(2).toArray).collect
    // res47: Array[Array[Array[String]]] = Array(Array(Array(cyber crimes, cyber security), Array(cyber crimes, review), Array(cyber crimes, india) ..
    

    要取回元组:

    cleanwords.map(_.combinations(2).map(x => (x(0), x(1))).toArray).collect
    // res60: Array[Array[(String, String)]] = Array(Array((cyber crimes,cyber security), (cyber crimes,review), (cyber crimes,india) ..
    

    【讨论】:

      猜你喜欢
      • 2017-05-29
      • 1970-01-01
      • 2017-10-05
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2023-03-28
      相关资源
      最近更新 更多