如何在Java中转置一个Spark数据集?

huangapple go评论72阅读模式
英文:

How to transpose a spark dataset in java?

问题

我是你的中文翻译,下面是你提供的内容的翻译:

我刚开始使用 Spark Java,想要转置数据集<row>。我已经查看了使用 pivot 函数来转置数据集的方法,但是表头对我来说是未知的,因此无法使用 pivot 函数来实现。在 Java 中是否有任何方法可以转置数据集。

英文:

I new to spark java i wanted to transpose dataset<row>. I have checked the pivot function to transpose the the dataset but the header are unknown to me so cannot use the pivot fuction to do so is there any way in java i can transpose the dataset .

答案1

得分: 0

问题在于SparkSQL没有转置函数。因此,您必须为数据集创建一个新的架构,并创建一个映射函数,以便将行的位置更改为列的位置。

英文:

The problem here is that SparkSQL doesn't have a transpose function. So you must create a new Schema for your dataset as well as create a mapper function in order to change the location of rows to columns.

答案2

得分: 0

这将使用一个枢轴列在 Spark 中对数据集进行转置。

private static Dataset<Row> transposeDF(Dataset<Row> df, String[] columns, String pivotCol) {
    List<String> columnsValue =
        Arrays.asList(columns).stream().map(x -> "'" + x + "', " + x).collect(Collectors.toList());

    String stackCols = String.join(",", columnsValue);
    Dataset<Row> df1 =
        df.selectExpr(pivotCol, "stack(" + columns.length + "," + stackCols + ")")
            .select(pivotCol, "col0", "col1");

    Dataset<Row> finalDF =
        df1.groupBy(functions.col("col0"))
            .pivot(pivotCol)
            .agg(functions.concat_ws("", functions.collect_list(functions.col("col1"))))
            .withColumnRenamed("col0", pivotCol);
    return finalDF;
}

注意:这是您提供的代码的翻译部分,没有其他附加内容。

英文:

this will transpose the dataset in spark using a pivot column.

private static Dataset&lt;Row&gt; transposeDF(Dataset&lt;Row&gt; df, String[] columns, String pivotCol) {
    List&lt;String&gt; columnsValue =
        Arrays.asList(columns).stream().map(x -&gt; &quot;&#39;&quot; + x + &quot;&#39;, &quot; + x).collect(Collectors.toList());

    String stackCols = String.join(&quot;,&quot;, columnsValue);
    Dataset&lt;Row&gt; df1 =
        df.selectExpr(pivotCol, &quot;stack(&quot; + columns.length + &quot;,&quot; + stackCols + &quot;)&quot;)
            .select(pivotCol, &quot;col0&quot;, &quot;col1&quot;);

    Dataset&lt;Row&gt; finalDF =
        df1.groupBy(functions.col(&quot;col0&quot;))
            .pivot(pivotCol)
            .agg(functions.concat_ws(&quot;&quot;, functions.collect_list(functions.col(&quot;col1&quot;))))
            .withColumnRenamed(&quot;col0&quot;, pivotCol);
    return finalDF;
  }

huangapple
  • 本文由 发表于 2020年10月5日 12:22:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/64202438.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定