我有这种类型;
column1 column2 int
((a,b),1)
((a,c),1)
((k,a),1)
我需要两种类型的结果,首先是所有column2的第1列
(a,total)
其次column1参数不等于column2参数
(a,total)
我如何使用ReduceByKey这种类型?
我的代码:
var data = sc.textFile("tttt.tsv")
var satir = data.map(line=> ((line.split("\t")(1).toString,line.split("\t")(2).toString),1))
---关于第二个场景
我的数据类型示例是
column1 column2 int
a b,1
a c,1
a a,1
a d,1
我需要reduceByKey for column1在第二个场景中不等于column1
例如,我的示例数据结果=(a,b,1)+(a,c,1)+(a,d,1)= 3
答案 0 :(得分:0)
对于First Scenario,您可以使用此方案。
val arrangedDF = satir.map(pairData => (pairData._1._1, (pairData._1._2, 1)))
val result1DF = arrangedDF.reduceByKey((x,y) => x._2 + y._2)
在这里,我重新排列了数据的表示,我将数据分开并将数据放入不同的元组中,您可以直接应用reduceByKey
。
对于Second Scenario,您可以使用此功能。
val result2DF = arrangedDF.filter( pairData => pairData._1 != pairData._2._1).reduceByKey((x,y) => x._2 + y._2)
这里针对第二个场景我重复使用arrangedDF
并对其应用过滤器以获取您想要的条件,即column1参数不等于column2参数,然后应用reduceByKey
希望我的回答很清楚
由于
答案 1 :(得分:0)
如果我理解你的问题,下面是获得你所要求的一种方式:
public class SubCategoryChild_Response {
@SerializedName("status")
@Expose
private String status;
@SerializedName("merchant")
@Expose
private List<SubCategoryChild> subCategoryChildList = null;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<SubCategoryChild> getSubCategoryChild() {
return subCategoryChildList;
}
public void setSubCategoryChildList(List<SubCategoryChild> subCategoryChildList) {
this.subCategoryChildList = subCategoryChildList;
}
}