Написание моей первой спарк-программы и, наконец, некоторые базовые вещи работают, но теперь они выводят не совпадающие с данными из java-программы, которую я мигрирую.
Исходная Java-программа отправляется в базу данных и заполняетсямассив с данными за несколько лет, и я затем передал бы его другому объекту, который выполнил бы несколько анализов и выложил бы результаты, например, средние значения, но некоторые точки данных были бы более сложными, поэтому я не могу просто преобразовать все в Scala.
У меня есть искра, загружающая набор данных, и я могу подтвердить, что он загружает его правильно в мой массив, например
MyJavaOb{
int sales
int year
int getSales(){
return sales;
}
}
И у меня есть массив этих
MyJavaOb [] myArr
Который правильно загружен из искры
2016, 500 2017, 900 2018, 700
Но теперь я хочу передать это моему объекту анализа, который немного сложнее. Я пишу только одну метрику, но у меня их много.
MyAnalysisObj{
final MyJavaOb[] arr;
MyAnalysisObj(MyJavaOb [] arr){
this.arr= arr;
}
getTotSales(){
return getAvg(MyJavaOb::getSales);
}
getAvg(Function<? super MyJavaOb,Integer> x){
int tot=0
for(){
tot = tot + x.apply()
}
return tot;
}
}
returns 0;
Так что по какой-то причине в среде искры переданная функция не работает. Я могу подтвердить, что значения массива присутствуют, и это работает в Java, но не в Scala.
Редактировать # 1 Scala выглядит примерно так:
scala> myArr
Array[your.java.object. MyJavaOb] = Array(your.java.object. MyJavaOb@123kghj,your.java.object.MyJavaOb@343jhhsa, your.java.object.MyJavaOb@834dsfd)
scala> val test = new MyAnalysisObj(myArr)
scala> test. getTotSales
Int = 0
Примечание: одно тонкое отличие состоит в том, что мойобъект, который находится в массиве, возвращается фабрикой, и мы оперируем интерфейсом. Не уверен, почему это будет проблемой, хотя