使用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