7
votes

Groupbykey avec des jeux de données dans Spark 2.0 à l'aide de Java

J'ai un jeu de données contenant des données telles que celles suivantes: xxx pré>

... p>

MAINTENANT, je veux obtenir les données regroupées comme suit ( COL1: KEY STRING, COL2: LISTE) STRUT>: P>

| c1| c2 |
-----------
| 1 |a,b,c|
| 2 | a, b|
...


0 commentaires

3 Réponses :


1
votes

avec un Dataframe dans Spark 2.0:

scala> val data = List((1, "a"), (1, "b"), (1, "c"), (2, "a"), (2, "b")).toDF("c1", "c2")
data: org.apache.spark.sql.DataFrame = [c1: int, c2: string]
scala> data.groupBy("c1").agg(collect_list("c2")).collect.foreach(println)
[1,WrappedArray(a, b, c)]
[2,WrappedArray(a, b)]


0 commentaires

3
votes

Voici l'exemple Spark 2.0 et Java avec jeu de données.

public class SparkSample {
    public static void main(String[] args) {
    //SparkSession
    SparkSession spark = SparkSession
            .builder()
            .appName("SparkSample")
            .config("spark.sql.warehouse.dir", "/file:C:/temp")
            .master("local")
            .getOrCreate();     
    //input data
    List<Tuple2<Integer,String>> inputList = new ArrayList<Tuple2<Integer,String>>();
    inputList.add(new Tuple2<Integer,String>(1, "a"));
    inputList.add(new Tuple2<Integer,String>(1, "b"));
    inputList.add(new Tuple2<Integer,String>(1, "c"));
    inputList.add(new Tuple2<Integer,String>(2, "a"));
    inputList.add(new Tuple2<Integer,String>(2, "b"));          
    //dataset
    Dataset<Row> dataSet = spark.createDataset(inputList, Encoders.tuple(Encoders.INT(), Encoders.STRING())).toDF("c1","c2");
    dataSet.show();     
    //groupBy and aggregate
    Dataset<Row> dataSet1 = dataSet.groupBy("c1").agg(org.apache.spark.sql.functions.collect_list("c2")).toDF("c1","c2");
    dataSet1.show();
    //stop
    spark.stop();
  }
}


1 commentaires

Heureux d'avoir pu aider.



0
votes

Ceci lira la table dans la variable de DataSet xxx


0 commentaires