2017-05-23 18 views
0

Apache-spark에서 사용할 수있는 형식이 아닌 데이터 집합이 있습니다. 이러한 데이터는 데이터를 처리하는 스크립트에서Java POJO의 groupBy와 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); 
... 

처리 후 I 데이터 집합을 생성하고 기본 쇼 기본 필터를 수행

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

모두 괜찮습니다.

+------+-----+ 
|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 함수 작업 괜찮아. 이유를 이해할 수 없습니다.

답변

1

향후 사용자를위한 설명입니다. 해결책은 엔코더를 사용하는 것인데, 즉

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