RDD的reduceByKey失败,带有非法访问器错误

时间:2018-08-30 07:29:58

标签: apache-spark apache-spark-sql

我有一个用JavaRDD编写的正在工作的Spark作业。现在,我想将输出移至数据帧,而无需对现有代码进行太多更改。我的意图是通过使用sqlContext将RDD转换为数据帧。但是不建议使用,因此我正在使用SparkSession创建SparkContext,后来使用它将RDD转换为数据帧。

我的问题是RDD对上的reduceBykey不再起作用。尽管在编译时没有错误,但执行时会失败,并显示IllegalAccessError错误,可以通过我的代码中的reduceByKey调用追溯到该行。

这是错误 Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapred.FileInputFormat

下面是代码段

SparkSession spark = SparkSession
    .builder()
    .appName("test")
    .master("local")
    .getOrCreate();

SparkContext sc = spark.sparkContext();
JavaRDD<String> lineInput = spark.sparkContext()
              .textFile("/tmp/test.txt", 1)
              .toJavaRDD();

JavaPairRDD<String, String> pairInput = lineInput
            .mapToPair(new FlatRDDToPairRDD());
//FlatRDDToPairRDD class takes a string and returns a Tuple
JavaPairRDD<String, String> reducedPair = pairInput.reduceByKey(new TestReducer());
JavaRDD<String> outputRDD = reducedPair.map(new 
PairRDDToFlatValueRDD());
//PairRDDToFlatValueRDD takes a Tuple and returns as string

这是我对pom文件的依赖

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>2.3.1</version>
    </dependency>

还有其他人遇到类似的问题吗?有关如何进行的一些提示会有所帮助。

0 个答案:

没有答案