代码之家  ›  专栏  ›  技术社区  ›  Golak Sarangi

RDD的reduceByKey失败,出现illegalAccessor错误

  •  1
  • Golak Sarangi  · 技术社区  · 6 年前

    我有一个用javard写的工作火花。现在我想把输出移到dataframes,而不需要对现有代码做太多更改。我的目的是通过使用sqlContext将RDD转换为数据帧。但是不推荐使用它,所以我使用SparkSession创建SparkContext,然后使用它将RDD转换为DataFrame。

    我的问题是 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 回复  |  直到 6 年前