簡體   English   中英

Java POJO上的groupBy出現Spark Dataset錯誤

[英]Spark Dataset error with groupBy on Java POJO

我有一組數據,Apache-spark無法使用任何格式。 我為此類數據創建一個類,即

public class TBHits {

    int status;
    int trkID;

    public TBHits(int trkID, int status) {
        this.status = status;

        this.trkID = trkID;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }



    public int getTrkID() {
        return trkID;
    }

    public void setTrkID(int trkID) {
        this.trkID = trkID;
    }

}

在處理數據的腳本中,我創建了一個列表

private List<TBHits> deptList = new ArrayList<TBHits>();

在處理數據時,我創建了TBHits對象並將其添加到列表中

...
...     
TBHits tbHits = new TBHits((bnkHits.getInt("trkID", i)), (bnkHits.getInt("status", i)));
tbHitList.add(tbHits);
...

處理之后,我創建了DataSet並進行了基本顯示和基本過濾器

Dataset<Row> tbHitDf = spSession.createDataFrame(tbHitList, TBHits.class);
tbHitDf.show();
deptDf.filter(deptDf.col("trkID").gt(0)).show();

一切都OK。

+------+-----+
|status|trkID|
+------+-----+
|     1|    0|
|     1|    0|
...
...

+------+-----+
|status|trkID|
+------+-----+
|     1|    1|
|     1|    1|
|     1|    1|

...
...

當我嘗試使用groupBy並計數時

tbHitDf.groupBy("trkID").count().show();

,我收到一個無法理解的錯誤

Exception in thread "main" java.lang.StackOverflowError
    at java.io.ObjectStreamClass$WeakClassKey.<init>(ObjectStreamClass.java:2307)
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:322)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1134)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
...
...
...

但是如果我手動插入數據

TBHits tb1 = new TBHits(1, 1);
TBHits tb2 = new TBHits(1, 2);
tbHitList.add(tb1);
tbHitList.add(tb2);

然后,groupBy函數可以正常工作。 我不明白為什么。

對於未來的用戶。 解決方案是使用編碼器,即

Encoder<TBHits> TBHitsEncoder = Encoders.bean(TBHits.class);
Dataset<TBHits> tbHitDf = spSession.createDataset(tbHitList, TBHitsEncoder);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM