java - 使用 Java 在 Apache Spark 中从数据集中复制一行 n 次

标签 java apache-spark spark-dataframe apache-spark-dataset

我正在尝试从数据集中复制一行 n 次并从中创建一个新数据集。但是,在复制时,我需要为每次复制更改一个列的值,因为它最终会在最终存储时作为主键。

下面是来自 SO 帖子的 Scala 代码:Replicate Spark Row N-times

import org.apache.spark.sql.functions._

val result = singleRowDF
  .withColumn("dummy", explode(array((1 until 100).map(lit): _*)))
  .selectExpr(singleRowDF.columns: _*)

如何从 Java 中的值数组创建列并将其传递给 explode 函数?建议很有帮助。

谢谢

最佳答案

这是从数据集中复制一行 n 次的 Java 程序。

import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.explode;
import static org.apache.spark.sql.functions.lit;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class SparkSample{
    public static void main(String[] args) {
        SparkSession spark = SparkSession
                .builder()
                .appName("SparkSample")
                .master("local[*]")
                .getOrCreate();
        //Create Dataset
        List<Tuple2<String,Double>> inputList = new ArrayList<Tuple2<String,Double>>();
        inputList.add(new Tuple2<String,Double>("A",1.0));
        Dataset<Row> df = spark.createDataset(inputList, Encoders.tuple(Encoders.STRING(), Encoders.DOUBLE())).toDF();
        df.show(false);
        //Java 8 style of creating Array. You can create by using for loop as well
        int[] array = IntStream.range(0, 5).toArray();
        //With Dummy Column
        Dataset<Row> df1 = df.withColumn("dummy", explode(lit(array)));
        df1.show(false);
        //Drop Dummy Column
        Dataset<Row> df2 = df1.drop(col("dummy"));
        df2.show(false);
    }
}

下面是这个程序的输出。

+---+---+
|_1 |_2 |
+---+---+
|A  |1.0|
+---+---+

+---+---+-----+
|_1 |_2 |dummy|
+---+---+-----+
|A  |1.0|0    |
|A  |1.0|1    |
|A  |1.0|2    |
|A  |1.0|3    |
|A  |1.0|4    |
+---+---+-----+

+---+---+
|_1 |_2 |
+---+---+
|A  |1.0|
|A  |1.0|
|A  |1.0|
|A  |1.0|
|A  |1.0|
+---+---+

关于java - 使用 Java 在 Apache Spark 中从数据集中复制一行 n 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480147/

相关文章:

linux - 如何在Linux终端中运行spark scala程序?

hadoop - 无法与PySpark应用架构-不一致的字段

scala - 引发多次迭代内存不足

java - 使用 SessionBean EJBObject 和 EJBHome 接口(interface)创建 EJB

java - 如何在Java中在服务器端执行线程安全方法?

apache-spark - 如何让 Apache Spark 在 GPU 上运行?

apache-spark - 从 Spark 写入时避免丢失分区数据的数据类型

apache-spark - SparkR - 为数据挖掘创建测试和训练数据帧

java - 为圣诞节烘焙 cookies 的程序,类(class)无法正常运行

java - 在 Grails 中,如何获取语言环境的 messages.properties ConfigObject?