У меня есть рабочая искровая работа, написанная с помощью JavaRDD. Теперь я хочу переместить вывод в dataframes без внесения значительных изменений в существующий код. Мое намерение состояло в том, чтобы преобразовать RDD в кадры данных с помощью sqlContext. Но это устарело, поэтому я использую SparkSession для создания SparkContext, а затем использую его для преобразования 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>
Кто-нибудь еще сталкивался с подобными проблемами? Некоторые советы о том, как действовать, будут полезны.