【问题标题】:Transform data using scala in spark在 Spark 中使用 Scala 转换数据
【发布时间】:2016-09-19 03:11:57
【问题描述】:

我正在尝试将输入文本文件转换为键/值 RDD,但下面的代码不起作用。(文本文件是制表符分隔的文件。)我真的是 Scala 和 Spark 的新手,所以我会非常感谢您的帮助。

import org.apache.spark.{SparkConf, SparkContext}
import scala.io.Source

object shortTwitter {

  def main(args: Array[String]): Unit = {
    for (line <- Source.fromFile(args(1).txt).getLines()) {
      val newLine = line.map(line =>
      val p = line.split("\t")
      (p(0).toString, p(1).toInt)
      )
}

    val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]")
    val sc = new SparkContext(sparkConf)
    val text = sc.textFile(args(0))
    val counts = text.flatMap(line => line.split("\t"))
  }
}

【问题讨论】:

  • “下面的代码不起作用” - 怎么回事?失败的原因是什么?

标签: scala intellij-idea apache-spark sdk java-7


【解决方案1】:

我假设您希望生成的 RDD 具有 RDD[(String, Int)] 类型,所以 -

  • 您应该使用map(将每条记录转换为一条新记录)而不是flatMap(将每条记录转换为多个记录)
  • 您应该将split 的结果映射到一个元组中

总共:

val counts = text
  .map(line => line.split("\t"))
  .map(arr => (arr(0), arr(1).toInt))

EDIT 根据评论中的说明:如果您也有兴趣修复非 Spark 部分(按顺序读取文件),那么您在理解语法中会遇到一些错误,这里是整件事:

def main(args: Array[String]): Unit = {
  // read the file without Spark (not necessary when using Spark):
  val countsWithoutSpark: Iterator[(String, Int)] = for {
    line <- Source.fromFile(args(1)).getLines()
  } yield {
    val p = line.split("\t")
    (p(0), p(1).toInt)
  }

  // equivalent code using Spark:
  val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]")
  val sc = new SparkContext(sparkConf)
  val counts: RDD[(String, Int)] = sc.textFile(args(0))
    .map(line => line.split("\t"))
    .map(arr => (arr(0), arr(1).toInt))
}

【讨论】:

  • 除此之外,错误显示“简单表达式的非法开始,val p = line.split("\t")”。由于这个错误,我根本无法运行代码
  • 哦,我明白了,我认为该代码只是为了阐明您要使用 Spark 做什么,我认为使用这两个部分没有任何意义 - 一个顺序读取文件,一个使用 Spark做同样的事情......无论如何 - 请参阅更新的答案。
  • 谢谢!第二部分是做其他事情的代码。很抱歉让您感到困惑,哈哈……还有一个问题!如何使用'print'检查没有火花的代码结果?
  • countsWithoutSpark.foreach(println)
猜你喜欢
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多