原创
解决本地模式Scala调试spark无法读取本地文件报错
温馨提示:
本文最后更新于 2018年07月13日,已超过 2,324 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
解决本地模式Scala调试spark无法读取本地文件报错Caused by: java.net.URISyntaxException: Relative path in absolute URI:
错误示例:
解决办法:
使用盘符前面加上file:///
本地文件传输协议就可以了。
什么是File协议
字面意思:本地文件传输协议
什么是File:
file协议主要用于访问本地计算机中的文件,好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样。
如何使用:
file协议的基本格式如下:
file:///文件路径
比如需要打开E盘下txt目录中的index.txt,那么在资源管理器或者浏览器地址栏中输入:file:///E:/txt/index.txt。用file:///+文件地址,其实等价于文件的地址。即:
file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles52F410/wangdan-se-436963[2].jpg
等价于:
C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles52F410/wangdan-se-436963[2].jpg
URI中问什么本地文件file后面跟三个斜杠?
URI的结构为:
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
如果有host,前面需要加//,因此对于http或https等网络地址来说会写成:
https://blog.csdn.net/lishanleilixin/article/category/7191777
这样看上去很自然。如果是文件的话,文件没有host,所以中间的host部分就不要了,就变成了:
file:///lishanleilixin/article/category/7191777
因为如果没有host的话,第一个[]的内容就不存在了,这种同意的写法有一个标准叫CURIE。
测试文本:
E:/Code/BigData/spark-01-wordcount/src/main/File/a.txt
www.liuzhaopo.top
lewis.org.cn
liuzhaopo
lzhpo
www.liuzhaopo.top
lewis.org.cn
liuzhaopo
lzhpo
www.liuzhaopo.top
lewis.org.cn
liuzhaopo
lzhpo
scala代码:
package com.lzhpo.scala
import org.apache.spark.{SparkConf, SparkContext}
/**
* <p>Create By IntelliJ IDEA</p>
* <p>Author:lzhpo</p>
*/
object WordCountDemo {
def main(args: Array[String]): Unit = {
//创建Spark配置对象
val conf = new SparkConf()
conf.setAppName("WordCountSpark")
//设置master属性
conf.setMaster("local")
//通过conf创建sc
val sc = new SparkContext(conf);
//加载文本文件
// val rdd1 = sc.textFile("E:/Code/BigData/spark-01-wordcount/src/main/File/a.txt")
//不使用file:///可能会报URL错,可能....
val rdd1 = sc.textFile("file:///E:/Code/BigData/spark-01-wordcount/src/main/File/a.txt")
//压扁
val rdd2 = rdd1.flatMap(line => line.split(" "))
//映射w => (w,1)
val rdd3 = rdd2.map((_,1))
val rdd4 = rdd3.reduceByKey(_ + _)
val r = rdd4.collect()
r.foreach(println)
}
}
scala代码运行结果:
(liuzhaopo,3)
(lewis.org.cn,3)
(,2)
(lzhpo,3)
(www.liuzhaopo.top,3)
java代码:
package com.lzhpo.java;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import scala.Tuple2;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* <p>Create By IntelliJ IDEA</p>
* <p>Author:lzhpo</p>
*/
public class WordCount {
public static void main(String[] args) {
//创建SparkConf对象
SparkConf conf = new SparkConf();
conf.setAppName("WordCountJava2");
conf.setMaster("local");
//创建java sc
JavaSparkContext sc = new JavaSparkContext(conf);
//加载文本文件
JavaRDD<String> rdd1 = sc.textFile("file:///file:///E:/Code/BigData/spark-01-wordcount/src/main/File/a.txt");
//压扁
JavaRDD<String> rdd2 = rdd1.flatMap(new FlatMapFunction<String, String>() {
public Iterator<String> call(String s) throws Exception {
List<String> list = new ArrayList<String>();
String[] arr = s.split(" ");
for(String ss :arr){
list.add(ss);
}
return list.iterator();
}
});
//映射,word -> (word,1)
JavaPairRDD<String,Integer> rdd3 = rdd2.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s,1);
}
});
//reduce化简
JavaPairRDD<String,Integer> rdd4 = rdd3.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer v1, Integer v2) throws Exception {
return v1 + v2;
}
});
//
List<Tuple2<String,Integer>> list = rdd4.collect();
for(Tuple2<String, Integer> t : list){
System.out.println(t._1() + " : " + t._2());
}
}
}
java运行结果:
liuzhaopo : 3
lewis.org.cn : 3
: 2
lzhpo : 3
www.liuzhaopo.top : 3
参考:
- 本文标签: Scala Spark
- 本文链接: http://www.lzhpo.com/article/61
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权