【问题标题】:Convert map to mapPartitions in spark将地图转换为火花中的mapPartitions
【发布时间】:2018-05-02 01:49:26
【问题描述】:

我有一个使用map transformation 分析日志文件的代码。然后RDD 被转换为DF

val logData = sc.textFile("hdfs://quickstart.cloudera:8020/user/cloudera/syslog.txt")

val logDataDF = logData.map(rec => (rec.split(" ")(0), rec.split(" ")(2), rec.split(" ")(5))).toDF("month", "date", "process")

我想知道在这种情况下我是否可以使用mapPartitions 而不是map

【问题讨论】:

  • 为什么需要映射分区?
  • 如果您绝对需要使用 mapPartitions,简单的答案是转换回 RDD。但是,应该使用 DataFrames 而不是 RDD,因为 RDD-based API is likely to be removed in Spark 3.0.
  • 其实没必要。我想知道是否有办法用 mapPartitions 重写这段代码。

标签: scala apache-spark


【解决方案1】:

我不知道您的用例是什么,但您绝对可以使用mapPartition 而不是map。下面的代码将返回相同的logDataDF

val logDataDF = logData.mapPartitions(x => {
  val lst = scala.collection.mutable.ListBuffer[(String, String, String)]()
  while (x.hasNext) {
    val rec = x.next().split(" ")
    lst += ((rec(0), rec(2), rec(5)))
  }
  lst.iterator
}).toDF("month", "date", "process")

【讨论】:

    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多