我想把一个 string[][]
变成一个 Dataset<Row>
柱由 string[]
. 我已经在网上浏览了文档和可用的例子,但找不到类似的东西。我不知道这是否可能,因为我对spark完全是个初学者。
样本输入: String[][] test = {{"test1"}, {"test2", "test3"}, {"test4", "test5"}};
样本输出:
Dataset<Row> test_df
test_df.show()
+-------------+
| foo|
+-------------+
| [test1]|
|[test2,test3]|
|[test4,test5]|
+-------------+
我可能对string[][]定义了structtype错误,我也尝试了不同的方法。我想做的是:
String[][] test = {{"test1"}, {"test2", "test3"}, {"test4", "test5"}};
List<String[]> test1 = Arrays.asList(test);
StructType structType = DataTypes.createStructType(
DataTypes.createStructField(
"foo",
DataTypes.createArrayType(DataTypes.StringType),
true));
Dataset<Row> t = spark.createDataFrame(test1, structType);
t.show();
1条答案
按热度按时间lzfw57am1#
代码的问题是您试图使用一个方法(
spark.createDataFrame(List<Row>, StructType)
)这需要一份Row
物体。但是你可以把它和数组列表一起使用。有几种方法可以克服它:
创建
Row
从每个数组中,然后应用您一直使用的方法。使用bean编码器创建字符串数组的数据集,然后将其转换为
Row
使用行编码器。使用javabean创建dataframe。
我认为最后一种方法是最简单的,所以这里是你如何做到这一点。您必须定义一个小的javabean,它的唯一示例变量是一个字符串数组。
确保javabean有一个接受字符串数组的构造函数。
然后,要创建dataframe,首先要创建
ArrayWrapper
(您的javabean),然后使用createDataFrame(List<?>,Class<?>)
方法。列的名称由javabean中示例变量的名称决定。