我是spark的新手,我试图在本地运行示例JavaWordCount表单spark git repo。SparkSession看起来像:
SparkSession spark = SparkSession
.builder()
.master("local[*]")
.appName("JavaWordCounter.com")
.getOrCreate();
字符串
虽然我的CPU有12个线程。程序只运行在一个
我试过SparkConf。parallelize可以很好地使用List:
List<String> inputData = new ArrayList<>();
inputData.add("WARN: Tuesday 4 September 0405");
inputData.add("ERROR: Tuesday 4 September 0408");
inputData.add("FATAL: Wednesday 5 September 1632");
inputData.add("ERROR: Friday 7 September 1854");
inputData.add("WARN: Saturday 8 September 1942");
SparkConf conf = new SparkConf().setAppName("newSpark").setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<Integer> myRdd = sc.parallelize(inputData);
型
但是当inputData是本地文件时
SparkConf conf = new SparkConf().setAppName("newSpark").setMaster("local[*]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> inputData = sc.textFile("src/main/resources/names.txt");
JavaRDD<Integer> myRdd = sc.parallelize(inputData);
型
我得到以下错误:
java: no suitable method found for parallelize(org.apache.spark.api.java.JavaRDD<java.lang.String>)
method org.apache.spark.api.java.JavaSparkContext.<T>parallelize(java.util.List<T>,int) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.apache.spark.api.java.JavaSparkContext.<T>parallelize(java.util.List<T>) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; org.apache.spark.api.java.JavaRDD<java.lang.String> cannot be converted to java.util.List<T>))
型
1条答案
按热度按时间bbmckpt71#
sc.textFile("src/main/resources/names.txt")
的输出已经返回了一个JavaRDD<String>
,它本身已经是一个分布式对象。在RDD上尝试
sc.parallelize
并没有真正意义:这就像试图从一个已经分布的对象中创建一个分布对象。如果你想把
JavaRDD<String>
转换成JavaRDD<Integer>
,你可以使用.map
函数,类似于下面的代码(我从来没有使用过Java API,所以请原谅我可能的语法错误):字符串