[英]Convert array of array of strings to a spark dataframe of array of strings in java
我正在嘗試將string[][]
轉換為由string[]
組成的Dataset<Row>
列。 我已經瀏覽了在線文檔和可用示例,但找不到與此類似的內容。 我不知道這是否可能,因為我是 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();
您的代碼的問題在於您正在嘗試使用一種方法( spark.createDataFrame(List<Row>, StructType)
),該方法采用Row
對象列表。 但是您將它與數組列表一起使用。
有幾種方法可以克服它:
Row
,然后應用您一直使用的方法。Row
的數據集。我認為最后一種方法是最簡單的,所以這里是你的方法。 您必須定義一個小的 Java bean,它的唯一實例變量是一個 String 數組。
public static class ArrayWrapper {
private String[] foo;
public ArrayWrapper(String[] foo) {
this.foo = foo;
}
public String[] getFoo() {
return foo;
}
public void setFoo(String[] foo) {
this.foo = foo;
}
}
確保 Java Bean 具有接受 String 數組的構造函數。
然后,要創建數據幀,首先從數組數組創建一個ArrayWrapper
(您的 Java Bean)列表,然后使用createDataFrame(List<?>,Class<?>)
方法創建一個數據幀。
String[][] test = {{"test1"}, {"test2", "test3"}, {"test4", "test5"}};
List<ArrayWrapper> list = Arrays.stream(test).map(ArrayWrapper::new).collect(Collectors.toList());
Dataset<Row> testDF = spark.createDataFrame(list,ArrayWrapper.class);
testDF.show();
列的名稱由 Java Bean 中實例變量的名稱決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.