使用Java API创建简单的1行Spark DataFrame

在Scala中,我可以像这样从内存中的字符串创建单行DataFrame:

val stringAsList = List("buzz")

val df = sqlContext.sparkContext.parallelize(jsonValues).toDF("fizz")

df.show()

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

+-----+

| fizz|

+-----+

| buzz|

+-----+

显然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。)所以我问:如何使用 将内存中的字符串读取到其中只有1行1列的DataFrame中,

(以便df.show()与上面的Scala相同)?

回答:

您可以通过创建到Rdd的列表,然后创建将包含列名的Schema来实现。

可能还有其他方法,只是其中一种。

List<String> stringAsList = new ArrayList<String>();

stringAsList.add("buzz");

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

return RowFactory.create(row);

});

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

DataFrame df = sqlContext.createDataFrame(rowRDD, schema).toDF();

df.show();

//+----+

|fizz|

+----+

|buzz|

以上是 使用Java API创建简单的1行Spark DataFrame 的全部内容, 来源链接: utcz.com/qa/402136.html

回到顶部