java - 使用 Java API 创建一个简单的 1 行 Spark DataFrame

标签 java apache-spark spark-dataframe

在 Scala 中,我可以从内存中的字符串创建一个单行 DataFrame,如下所示:

val stringAsList = List("buzz")
val df = sqlContext.sparkContext.parallelize(jsonValues).toDF("fizz")
df.show()

df.show() 运行时,它输出:

+-----+
| fizz|
+-----+
| buzz|
+-----+

现在我正尝试从 Java 类中执行此操作。显然 JavaRDD 没有 toDF(String)方法。我试过:

List<String> stringAsList = new ArrayList<String>();
stringAsList.add("buzz");
SQLContext sqlContext = new SQLContext(sparkContext);
DataFrame df = sqlContext.createDataFrame(sparkContext
    .parallelize(stringAsList), StringType);
df.show();

...但似乎仍然不足。现在当 df.show(); 执行时,我得到:

++
||
++
||
++

(一个空的 DF。)所以我问:使用 Java API,如何将内存中的字符串读入一个只有 1 行 1 列的 DataFrame,并指定该列的名称?(以便 df.show() 与上面的 Scala 相同)?

最佳答案

如果您需要升级,我已经为 Spark 2 创建了 2 个示例:

简单的 Fizz/Buzz(或 foe/bar - 老一代 :)):

    SparkSession spark = SparkSession.builder().appName("Build a DataFrame from Scratch").master("local[*]")
            .getOrCreate();

    List<String> stringAsList = new ArrayList<>();
    stringAsList.add("bar");

    JavaSparkContext sparkContext = new JavaSparkContext(spark.sparkContext());

    JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String row) -> RowFactory.create(row));

    // Creates schema
    StructType schema = DataTypes.createStructType(
            new StructField[] { DataTypes.createStructField("foe", DataTypes.StringType, false) });

    Dataset<Row> df = spark.sqlContext().createDataFrame(rowRDD, schema).toDF();

2x2 数据:

    SparkSession spark = SparkSession.builder().appName("Build a DataFrame from Scratch").master("local[*]")
            .getOrCreate();

    List<String[]> stringAsList = new ArrayList<>();
    stringAsList.add(new String[] { "bar1.1", "bar2.1" });
    stringAsList.add(new String[] { "bar1.2", "bar2.2" });

    JavaSparkContext sparkContext = new JavaSparkContext(spark.sparkContext());

    JavaRDD<Row> rowRDD = sparkContext.parallelize(stringAsList).map((String[] row) -> RowFactory.create(row));

    // Creates schema
    StructType schema = DataTypes
            .createStructType(new StructField[] { DataTypes.createStructField("foe1", DataTypes.StringType, false),
                    DataTypes.createStructField("foe2", DataTypes.StringType, false) });

    Dataset<Row> df = spark.sqlContext().createDataFrame(rowRDD, schema).toDF();

代码可以从以下地址下载:https://github.com/jgperrin/net.jgp.labs.spark .

关于java - 使用 Java API 创建一个简单的 1 行 Spark DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967194/

相关文章:

java - 如何设置电话号码的正则表达式中允许的最小和最大位数

apache-spark - 条件聚合 Spark DataFrame

python - 配置代理详细信息以连接到 Snowflake

apache-spark - Hive 分区、Spark 分区和 Spark 中的连接 - 它们之间的关系

apache-spark - spark数据帧中过滤器的多个条件

java - 时间段的数学集?

java - 整数解析不适用于将二进制转换为十进制

java - 在java中比较可序列化对象表示是一个好主意吗?

apache-spark - (Py)Spark 框架中数据框的数据可视化

apache-spark - SPARK,DataFrame : difference of Timestamp columns over consecutive rows