textFile=sc.textFile("hdfs://master:9000/123.txt")
时间: 2023-05-15 10:05:19 浏览: 94
这是一个用于读取 Hadoop 分布式文件系统中的文本文件的代码。sc.textFile() 函数会返回一个 RDD(Resilient Distributed Dataset),它是一个分布式的不可变数据集合。这个 RDD 可以被用于进行各种操作,比如过滤、映射、聚合等等。
相关问题
def main(args: Array[String]): Unit = { val conf = new SparkConf().setMaster("local[2]").setAppName("Test") val sc = new SparkContext(conf) val spark: SparkSession = SparkSession.builder().getOrCreate() import spark.implicits._ val path="hdfs://master:9000/travel/traveldata/3.xlsx" // val value: RDD[String] = sc.textFile(path) // value.foreach(println) // val df: DataFrame = spark.read .format("com.crealytics.spark.excel") .option("header", "true") // .option("sheetName", "Sheet1") // .option("treatEmptyValuesAsNulls", "true") // .option("inferSchema", "true") // .option("addColorColumns", "False") // .schema(schema) .load(path) // df.show() // value.map(v=>v+"123456").foreach(println) // var s: String = "" // value.foreach( // v=>{ // s+=v // } // ) // println(s) // df.show() // df.withColumn("SUM1", functions.split(col("SUM"), " ").getItem(0)).drop("SUM") // .withColumn("GRADE1", functions.split(col("GRADE"), "%").getItem(0)).drop("GRADE") // // .createTempView("comment_data") // df.printSchema // .show() // val frame: DataFrame = spark.sql("select SPOT,OPENTIME,SUM1 as SUM,LOCATION,round(cast(GRADE1 as Int)*5/100,1) as GRADE,COMMENT from comment_data where comment is not null") // frame.show() spark.stop() sc.stop() }
根据你提供的代码,错误可能是由于以下原因之一导致的:
1. Excel 文件路径不正确或无法访问。请检查 `path` 变量是否设置正确,Excel 文件是否存在,并且你的代码是否具有访问权限。
2. 缺少 `com.crealytics.spark.excel` 包。请确保你的项目依赖项中包含该包。你可以在 Maven 中添加以下依赖项来解决该问题:
```
<dependency>
<groupId>com.crealytics</groupId>
<artifactId>spark-excel_2.11</artifactId>
<version>0.11.1</version>
</dependency>
```
3. Excel 文件格式不正确。请确保你的 Excel 文件是 `.xlsx` 格式,并且使用最新的 Microsoft Office 版本(2010 及以上)生成,因为早期版本的 Excel 可能不兼容。
希望这些提示能帮助你解决问题。
:创建input.txt文件并上传到hdfs 的/yourname/input/目录下,用spark读取 内容,对文件中所有单词去重获得词表,将词表输出到本地文件“voc.txt”文件。
要完成这个任务,你需要按照以下步骤操作:
1. 使用Hadoop的命令行工具来创建本地的`input.txt`文件,并上传到HDFS的指定目录`/yourname/input/`下。可以使用以下命令来创建文件并上传:
```bash
hadoop fs -mkdir -p /yourname/input/
hadoop fs -put input.txt /yourname/input/
```
2. 使用Spark来读取HDFS上的文件内容。首先,确保你已经配置好了Spark环境,并且能够运行Spark作业。然后,使用以下的Scala代码来读取文件,并对内容进行处理:
```scala
import org.apache.spark.{SparkConf, SparkContext}
object UniqueWords {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("UniqueWords")
val sc = new SparkContext(conf)
val inputPath = "/yourname/input/input.txt"
val outputPath = "./voc.txt"
val textFile = sc.textFile(inputPath)
val uniqueWords = textFile.flatMap(line => line.split("\\s+"))
.map(word => word.toLowerCase)
.distinct()
.collect()
val output = sc.parallelize(uniqueWords)
output.saveAsTextFile(outputPath)
sc.stop()
}
}
```
这段代码做了以下几件事情:
- 初始化Spark环境,并创建一个SparkContext对象。
- 读取HDFS上`/yourname/input/input.txt`路径的文件内容。
- 使用flatMap将每行文本拆分成单词,并使用map将每个单词转换为小写。
- 使用distinct方法去除重复的单词,得到一个包含所有唯一单词的RDD。
- 将这些单词collect到一个数组中,并使用Spark的saveAsTextFile方法将结果保存到本地文件系统中的`voc.txt`文件。
3. 运行Spark程序。你可以使用sbt、Maven或者直接使用Spark的submit命令来运行你的应用程序。
```bash
spark-submit --class UniqueWords --master local[4] your-spark-app.jar
```
请确保你已经将代码打包成jar包,并且替换`your-spark-app.jar`为你的实际jar文件名。
阅读全文