(Dies basiert auf versucht, eine Integer RDD zu einer TholdDropResult RDD zuordnen, aber wir müssen eine einzige SparkDoDrop initialisieren, um alle (10^8) TholdDropResults zu generieren, daher die Verwendung der einzigen Geschmack in Java von mapPartition von mapPartitionsWithIndex, dass die Art der Funktion bieten wir benötigen, methinks)Apache Spark Function2, bekommt keine Deklaration richtig
. Frage: ich erhalte eine Fehlermeldung mit org.apache.spark.api.java.function.Function2
ich bin um herauszufinden, wie nicht in der Lage arbeite mit dem "boolean" in eine new Function2
Wenn ich diesen Code versuchen, dann nach rechts, die new Function2
Erklärung zu sehen, die Mühe geben, mir zu sein scheint (hinzugefügt Builder-Stil Formatierung Antwort):
JavaRDD<TholdDropResult> dropResultsN = dataSetN.mapPartitionsWithIndex(
new Function2<Integer,
Iterator<Integer>,
Iterator<TholdDropResult>>(){
@Override
public Iterator<TholdDropResult> call(Integer partitionID, Iterator<Integer> integerIterator) throws Exception {
//
SparkDoDrop standin = makeNewSparkDoDrop();
standin.initializeLI();
List<TholdDropResult> rddToReturn = new ArrayList<>();
while (integerIterator.hasNext()){
rddToReturn.add(standin.call(integerIterator.next()));
}
return rddToReturn.iterator();
}});
dropResultsN.persist(StorageLevel.MEMORY_ONLY());
Hier ist der vollständige Fehler, wenn ich laufe gradle build
:
JavaRDD<TholdDropResult> dropResultsN = dataSetN.mapPartitionsWithIndex(new Function2<Integer, Iterator<Integer>, Iterator<TholdDropResult>>(){
required: Function2<Integer,Iterator<Integer>,Iterator<R>>,boolean
found: <anonymous Function2<Integer,Iterator<Integer>,Iterator<TholdDropResult>>>
reason: cannot infer type-variable(s) R
(actual and formal argument lists differ in length)
where R,T,This are type-variables:
R extends Object declared in method <R>mapPartitionsWithIndex(Function2<Integer,Iterator<T>,Iterator<R>>,boolean)
T extends Object declared in class AbstractJavaRDDLike
This extends JavaRDDLike<T,This> declared in class AbstractJavaRDDLike
Wenn ich versuche, wie so dort die Boolesche arg zu platzieren: new Function2<Integer, Iterator<Integer>, Iterator<TholdDropResult>, Boolean>()
ich erhalte eine Fehlermeldung:
error: wrong number of type arguments; required 3
JavaRDD<TholdDropResult> dropResultsN = dataSetN.mapPartitionsWithIndex(new Function2<Integer, Iterator<Integer>, Iterator<TholdDropResult>, Boolean>(){
Schließlich, wenn ich boolean
statt Boolean
verwenden erhalte ich einen anderen Fehler:
error: unexpected type
JavaRDD<TholdDropResult> dropResultsN = dataSetN.mapPartitionsWithIndex(new Function2<Integer, Iterator<Integer>, Iterator<TholdDropResult>, boolean>(){
^
required: reference
found: boolean
error: wrong number of type arguments; required 3
JavaRDD<TholdDropResult> dropResultsN = dataSetN.mapPartitionsWithIndex(new Function2<Integer, Iterator<Integer>, Iterator<TholdDropResult>, boolean>(){
Und FWIW der Der Grund für diesen Ansatz ist, dass die Zeile 'standin.initializeLI();' ein ziemlich großes Objekt erzeugt, das wir nicht serialisieren wollen. Wir möchten, dass Spark dieses Objekt auf dem Executor erzeugt. – JimLohse