복붙노트

[HADOOP] 정수에서 문자 제거

HADOOP

정수에서 문자 제거

FileDataModel은 형식의 데이터를 허용합니다.

 userId,itemId,pref(long,long,Double).

현재 숫자 끝에 'x'로 구성된 itemId가 있습니다. 'x'를 제거하도록 itemID의 일부를 어떻게 편집합니까? 간단한 try catch 문 으로이 작업을 수행 할 수 있습니까?

DataModel model = null;
try{
    model = new FileDataModel(new File("book_data/BX-Book-Ratings.csv"));

}catch(NumberFormatException e){
    REMOVE X


}

암호:

DataModel model = new FileDataModel(new File("book_data/BX-Book-Ratings.csv"));

오류:

Exception in thread "main" java.lang.NumberFormatException: For input string: "034545104X"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Long.parseLong(Long.java:589)
    at java.lang.Long.parseLong(Long.java:631)

데이터:

276725,034545104X,0
276726,155061224,5
276727,446520802,0
276729,052165615X,3

해결법

  1. ==============================

    1.한 가지 방법은 파일에서 프리 프로세서를 실행하여 파일의 컨텐츠를 변환하여 FileDataModel과 호환되는지 확인하는 것입니다. 데이터 형식이 매우 간단한 경우 정규식 바꾸기 만 사용하면됩니다. 그렇지 않으면 데이터를 메모리로 가져올 수있는 변환기를 사용하고 변환기로 조작을 수행하고 결과를 직렬 변환기로 다시 저장하는 것이 좋습니다.

    한 가지 방법은 파일에서 프리 프로세서를 실행하여 파일의 컨텐츠를 변환하여 FileDataModel과 호환되는지 확인하는 것입니다. 데이터 형식이 매우 간단한 경우 정규식 바꾸기 만 사용하면됩니다. 그렇지 않으면 데이터를 메모리로 가져올 수있는 변환기를 사용하고 변환기로 조작을 수행하고 결과를 직렬 변환기로 다시 저장하는 것이 좋습니다.

    다음과 같은 것 :

    File file = new File("book_data/BX-Book-Ratings.csv");
    FileDataModelTransformer transformer = new FileDataModelTransformer();
    transformer.transformInPlace(file);
    DataModel model = new FileDataModel(file);
    

    그건 그렇고, File보다 스트림이나 버퍼에 의존하는 것이 더 유연합니다.

  2. ==============================

    2.가장 쉬운 방법, IMHO는 if 문을 사용하는 것입니다.

    가장 쉬운 방법, IMHO는 if 문을 사용하는 것입니다.

    String itemIdStr = "034545104X"; // for example
    if (itenIdStr.endsWith("X")) {
        itemIdStr = itemIdStr.substring(0, itemIdStr.length() - 1);
    }
    long itemId = Long.parseLong(itemIdStr);
    
  3. from https://stackoverflow.com/questions/40196498/remove-character-from-integer by cc-by-sa and MIT license