Bonjour à tous,

je démarre mon alternance en big data, je suis en train d'automatiser une requête sql en java spark 2 et je rencontre le problème suivant :

j'ai
SERVICECODE FREETEXT
1 a
2 b
3 c

et je veux avoir le tableau suivant :

1 2 3
a b c

pour cela j'ai les codes suivant :

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class FreeTextAggregatorOnServiceCode extends Aggregator<Row, FreeTextHolder, String> {
 
	private static final long serialVersionUID = 5811361034278939542L;
 
	private final String serviceCode;
 
	public FreeTextAggregatorOnServiceCode(final String serviceCode) {
		Preconditions.checkArgument(Strings.isNotEmpty(serviceCode));
		this.serviceCode = serviceCode;
	}
 
	@Override
	public Encoder<FreeTextHolder> bufferEncoder() {
		return Encoders.bean(FreeTextHolder.class);
	}
 
	@Override
	public String finish(final FreeTextHolder arg0) {
		return null;
	}
 
	@Override
	public FreeTextHolder merge(FreeTextHolder left, FreeTextHolder right ) {
		FreeTextHolder result = new FreeTextHolder();
 
		if (Strings.isNotEmpty(left.getFreeText())) {
			result.setFreeText(left.getFreeText());
 
		} else {
			result.setFreeText(right.getFreeText());
 
		}
 
		return result;
	}
 
	@Override
	public Encoder<String> outputEncoder() {
		return Encoders.STRING();
	}
 
	@Override
	public FreeTextHolder reduce(FreeTextHolder buffer, Row row) {
		if (!serviceCode.equals(row.getString(row.fieldIndex("SERVICECODE")))) {
			return buffer;
		}
		buffer.setFreeText(row.getString(row.fieldIndex("FREETEXT")));
		return buffer;
	}
 
	@Override
	public FreeTextHolder zero() {
		return new FreeTextHolder();
	}
}
 
public class FreeTextHolder implements Serializable {
 
	private static final long serialVersionUID = 6941403631962694716L;
	private String freeText;
 
	public String getFreeText() {
		return freeText;
	}
 
	public void setFreeText(final String freeText) {
		this.freeText = freeText;
	}
 
}

Et dans ma classe principale :

Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
	static {
		AGGREGATOR = new Column[SERVICECODE.length];
		for (int i = 0; i < SERVICECODE.length; i++) {
			final String name = (String)SERVICECODE[i];
			AGGREGATOR[i] = new FreeTextAggregatorOnServiceCode(name).toColumn().as(name);
		}
	}

où SERVICECODE est un tableau contenant 1, 2, 3

sauf que quand je compile, les 3 colonnes 1, 2, 3 sont bien créées mais je n'arrive pas à récupérer le freetext correspondant, mes colonnes sont vides.

Est ce que quelqu'un saurait où est-ce que j'ai fait une erreur ?

merci de vos réponses,

Bonne journée