Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文本文件作为参数scala传递_Scala_Apache Spark - Fatal编程技术网

如何将文本文件作为参数scala传递

如何将文本文件作为参数scala传递,scala,apache-spark,Scala,Apache Spark,我希望专门编写我的wordcount程序,这样我就可以在main中将输入文本文件作为参数传递。我对scala非常陌生,所以我不知道如何传递它的细节。我试着在我的主函数中将它直接提到为defmain(args:“C:/Users/rsjadsa/Documents/input.txt”) 我只想将我的文本文件作为参数传递,而不是硬编码,并对其应用相同的wordcount程序。我知道我不熟悉这种语言,所以很抱歉问了一个愚蠢的问题,它将是字符串数组args中的第一个元素,但这取决于你如何运行程序,以及

我希望专门编写我的wordcount程序,这样我就可以在main中将输入文本文件作为参数传递。我对scala非常陌生,所以我不知道如何传递它的细节。我试着在我的主函数中将它直接提到为defmain(args:“C:/Users/rsjadsa/Documents/input.txt”)


我只想将我的文本文件作为参数传递,而不是硬编码,并对其应用相同的wordcount程序。我知道我不熟悉这种语言,所以很抱歉问了一个愚蠢的问题,它将是字符串数组
args
中的第一个元素,但这取决于你如何运行程序,以及你想做什么。这只是从命令行参数中读取并分配给变量。如果希望它位于
数据帧中,您还需要创建一个模式(您可能应该这样做)

编辑:因为你想用RDD做字数统计,所以我拿出了数据框的东西,因为它让人困惑。此外,您应该在打印到屏幕之前将RDD收集到驱动程序中,否则它可能会做一些疯狂的事情,因为数据仍在执行器中

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import sqlContext.implicits._
import org.apache.spark.sql.types.{StructType,StructField,StringType};
import org.apache.spark.sql.Row;


object WordC {
  def main(args: Array[String]): Unit = {

    // retrieve the filename 
    val filename = args(0)

    val cf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(cf)

    val inputRDD = sc.textFile(filename)

    val wordsRDD = inputRDD.flatMap(line => line.split(" "))
    val wordCountRDD = words.map(word => (word, 1)).reduceByKey(_ + _)
    wordCountRDD.collect.foreach(println(_))

  }
}

然后不管您如何运行该程序,命令行参数都将是C:/Users/rsjadsa/Documents/input.txt就像
scala-WordC.scala“C:/Users/rsjadsa/Documents/input.txt”

谢谢。现在让我们假设我想使用这个程序将我的输出文件存储为文本文件,我如何传递一个参数才能做到这一点?@B2A3R9C9A您可以调用wordCountRDD上的
saveastextfile
,您可以将输出文件名作为第二个参数传递(这意味着它将位于
args(1)
)我建议您阅读&来看看这里已经介绍过的大多数基本问题。因此我将其命名为:wordCountRDD.saveAsTextFile(args(1))在名为目录的运行配置中保存文本文件,但我得到一个错误:错误执行器:阶段3.0中任务0.0中的异常错误任务集管理器:阶段3.0中的任务0失败1次;中止作业错误SparkHadoopWriter:中止作业\u 20190728165722\u 0005。
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import sqlContext.implicits._
import org.apache.spark.sql.types.{StructType,StructField,StringType};
import org.apache.spark.sql.Row;


object WordC {
  def main(args: Array[String]): Unit = {

    // retrieve the filename 
    val filename = args(0)

    val cf = new SparkConf().setAppName("WordCount").setMaster("local")
    val sc = new SparkContext(cf)

    val inputRDD = sc.textFile(filename)

    val wordsRDD = inputRDD.flatMap(line => line.split(" "))
    val wordCountRDD = words.map(word => (word, 1)).reduceByKey(_ + _)
    wordCountRDD.collect.foreach(println(_))

  }
}