[英]Apache Spark having Dataset of a parameterised/generic class in Java
如果在 Java 中可以使用參數化/通用類的數據集,我總是徘徊。 更清楚地說,我希望實現的是這樣的:
Dataset<MyClass<Integer>> myClassInteger;
Dataset<MyClass<String>> myClassString;
請讓我知道這是否可行。 如果您還可以向我展示如何實現這一目標,我將不勝感激。 謝謝!
抱歉,這個問題很舊,但我想記下一些筆記,因為我能夠通過創建一個帶有類型參數的泛型類,然后將方法放入該參數化類中,從而在 Java 中使用泛型/參數化類來處理數據集。 即, class MyClassProcessor<T1>
其中 T1 可以是Integer
或String
。
不幸的是,在這種情況下,您將無法享受泛型類型的全部好處,您必須執行一些變通方法:
Encoders.kryo()
,否則泛型類型會通過某些操作變成Object
並且無法正確轉換為泛型類型。
map
引入的。 例如,我閱讀了TypeA
,后來使用了 Dataset<MyClass>。TypeA.class
和對某些映射函數使用原始類型等......是的,您可以擁有自己的類的數據集。 它看起來像Dataset<MyOwnClass>
在下面的代碼中,我嘗試讀取文件內容並將其放入我們創建的類的數據集中。 請檢查下面的片段。
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoder;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import java.io.Serializable;
public class FileDataset {
public static class Employee implements Serializable {
public int key;
public int value;
}
public static void main(String[] args) {
// configure spark
SparkSession spark = SparkSession
.builder()
.appName("Reading JSON File into DataSet")
.master("local[2]")
.getOrCreate();
final Encoder<Employee> employeeEncoder = Encoders.bean(Employee.class);
final String jsonPath = "/Users/ajaychoudhary/Documents/student.txt";
// read JSON file to Dataset
Dataset<Employee> ds = spark.read()
.json(jsonPath)
.as(employeeEncoder);
ds.show();
}
}
我的student.txt
文件的內容是
{ "key": 1, "value": 2 }
{ "key": 3, "value": 4 }
{ "key": 5, "value": 6 }
它在控制台上產生以下輸出:
+---+-----+
|key|value|
+---+-----+
| 1| 2|
| 3| 4|
| 5| 6|
+---+-----+
我希望這能讓您初步了解如何擁有自己的自定義類的數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.