Spark数据集问题

时间:2019-01-18 20:15:01

标签: scala apache-spark dataset

当我在数据集的mapPartition(executeStrategy())中执行一个函数时,它返回一个可以通过调试检查的结果,但是当我使用dataset.show()时,它向我显示了一个空表,我不知道为什么这样做发生

这是我学校的数据挖掘工作。我正在使用Windows 10,scala 2.11.12和spark-2.2.0,它们可以正常工作。

case class MyState(code: util.ArrayList[Object], evaluation: util.ArrayList[java.lang.Double])

private def executeStrategy(iter: Iterator[Row]): Iterator[(String,MyState)] = {
  val listBest = new util.ArrayList[State]
  Predicate.fuzzyValues = iter.toList

  for (i <- 0 until conf.runNumber) {
    Strategy.executeStrategy(conf.iterByRun, 1, conf.algorithm("algorithm").asInstanceOf[GeneratorType])
    listBest.addAll(Strategy.getStrategy.listBest)
  }

  val result = postMining(listBest)

  result.map(x => (x.getCode.toString, MyState(x.getCode,x.getEvaluation))).iterator
}

def run(sparkSession: SparkSession, n: Int): Unit = {
  import sparkSession.implicits._

  var data0 = conf.dataBase.repartition(n).persist(StorageLevel.MEMORY_AND_DISK_SER)
  var listBest = new util.ArrayList[State]

  implicit def enc1 = Encoders.bean(classOf[(String,MyState)])

  val data1 = data0.mapPartitions(executeStrategy)
  data1.show(3)
}

我希望数据集具有每个分区的处理结果,调试时可以看到这些结果,但是我得到的是空数据集。 我已经尝试使用具有相同功能executeStrategy()的rdd,并且此返回结果的rdd。数据集有什么问题?

0 个答案:

没有答案