반응형

출처

https://stackoverflow.com/questions/13297207/is-it-valid-to-compare-a-double-with-an-int-in-java

Java에서 double과 int를 비교하는 것이 유효합니까?

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance는 double을 리턴하고 getAttackRange는 int를 리턴합니다. 위의 코드는 if 구문의 한 부분이고 이는 true가 되어야 합니다. 이 비교가 유효합니까?

감사합니다.

--

5개 답변중 1개의 답변만 추려냄.

예 유효합니다. 비교하기 전에 int를 double로 변환(promote)합니다.

JLS 섹션 5.6.2 (이진 숫자 변환) 의 링크에 있는 JLS 섹션 15.20.1 (숫자 비교 연산) 를 확인해 보세요.

뒷부분을 발췌하면

primitive의 넓은 타입의 변환은 다음 규칙에 의해 정의된 대로 두 피연산자에 변환이 적용됩니다.
* 만약 한 피연산자 type이 double이면 다른 하나는 double로 변환됩니다.
* ...

--

원본

https://github.com/SDRLurker/TIL/blob/master/scala/01/compare.md

반응형
반응형
번역계기

https://www.slideshare.net/madvirus/ss-28761748

위 슬라이드를 보며 Hive에 관한 내용을 읽던 도중 제약 부분에 행 단위 수정/삭제 불가로 쓰여 있는 내용을 보았습니다. 더 자세히 알아보고 싶어 다음처럼 찾아보았고 번역을 하게 되었습니다.


출처 

https://stackoverflow.com/questions/17810537/how-to-delete-and-update-a-record-in-hive

저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 Hive에서 작동하지 않습니다.

Hive에서 레코드를 지우거나(delete) 갱신하는(update) 방법

저는 Hadoop, Hive, Hive JDBC를 설치하였습니다. 각자 잘 작동하고 있습니다. 하지만, 아직 문제가 있습니다. MySQL에서 사용하는 delete나 update 명령으로 Hive를 사용하여 하나의 레코드를 삭제하거나 갱신하는 방법이 Hive에서 작동하지 않습니다.


감사합니다.

------

12개의 답변 중 2 개의 답변만 추려냄.

Hive를 일반적인 RDBMS로 생각하면 안됩니다. Hive는 변하지 않는 데이터의 매우 큰 데이터 집합에 대한 배치처리에 더 적합합니다. 

다음은 Hive 0.14 전 버전에 적용됩니다. 이후 버전은 @ashtonium님의 답변을 보세요.

레코드의 특정부분 집합이나 레코드를 삭제하거나 갱신하는 연산은 없고, 이는 나쁜 스키마의 싸인이라고 생각합니다.

다음은 당신이 찾아볼 수 공식문서에 있는 내용입니다.


하둡은 배치 처리 시스템이고 하둡 작업(jobs)은 대기 시간이 길고 작업 제출 및 스케쥴링에 상당한 오버헤드가 발생합니다. 결과적으로 Hive 쿼리에 대한 대기 시간은 데이터 집합이 매우 적을지라도 (여기서는 몇백메가 단위를 말합니다) 일반적으로 매우 (분 단위) 깁니다. 결국, 분석은 상당히 적은 양에서 실행하지만 몇 분 미만의 반복처리를 하는데 시간이 덜 걸리면서 반복 작업을 더 많이 하는 오라클 같은 시스템과는 비교될 수 없습니다. Hive는 상호작용하는 데이터 검색, 작은 데이터 셋이나 테스트 쿼리에 받아들일 수 있는 (하지만 최적화되지 않은) 대기 시간을 제공하는 게 목표입니다.

Hive는 온라인 트랜잭션 처리를 위해 설계되지 않았고 실시간 쿼리 및 행 단위 update를 제공하지 않습니다. (웹 로그 같은) 변하지 않는 데이터의 큰 집합에 대한 배치 작업에는 최고입니다.


이 한계를 벗어나서 작업하는 방법은 partition을 사용하는 것입니다. 저는 id가 어떻게 대응되는 지는 모르지만, id들의 다른 묶음을 분리해서 얻고 싶다면 id로 나누어서 테이블을 재설계할 수 있습니다. 그렇게 되면 당신이 제거하고 싶은 id들의 파티션을 쉽게 삭제(drop) 할 수 있습니다.

------

Hive 0.14.0부터 ACID 지원과 함께 INSERT... VALUES, UPDATE, DELETE 사용이 가능합니다.

INSERT ... VALUES 문법:

INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]

values_row는 (value [, value ...]) 이며 각 value는 null이나 다른 SQL에 적합한 리터럴입니다.


UPDATE 문법:

UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

DELETE 문법:

DELETE FROM tablename [WHERE expression]

추가하면 Hive 트랜잭션 문서 내용입니다.

Hive 0.14.0부터 테이블이 ACID 쓰기(insert, update, delete)로 사용된다면 그 테이블 속성은 "트랜잭션"으로 그 테이블에 설정되어 있어야 합니다. 이 값이 없다면 insert는 이전 방식으로 작동되며; update와 delete는 제한될 것입니다.


Hive DML 참조:

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML 

Hive 트랜잭션 참조:

https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

반응형
반응형

출처

uber jar는 무엇입니까?

저는 maven 문서를 읽고 있었는데 "uber jar"라는 이름이 나왔습니다.

uber-jar의 의미는 무엇이며 그 특징 / 장점은 무엇입니까?


4 개의 답변 중 1 개의 답변만 추려냄.

Über는 독일어로 above 또는 over입니다. 이전 국가의 한 줄 가사로 나옵니다. Deutschland, Deutschland, über alles(독일, 모든 다른 것 위에 독일)

그래서 이 문맥에서 "uber-jar"는 간단한 JAR (a) 보다 한 단계 "위의 jar" 입니다. "uber-jar"는 하나의 JAR 파일에 당신의 패키지와 모든 의존성을 포함하여 정의됩니다. 그 이름은 "보통을 뛰어넘는다"와 비슷한 뜻을 가지는 ultrageek, superman, hyperspace, 그리고 metadata와 동일한 의미에서 비롯된 것으로 생각할 수 있습니다.

장점은 uber-jar가 실제로 종속성이 없으므로 의존성에 관련하여 설치된 게 있는지 여부에 상관없이 이를 배포할 수 있습니다.

uber-jar 내에서 자신의 모든 항목의 의존(종속)성도 해당 uber-jar 내에 있습니다.


(a) 저는 아마도 자바 개발자에게 JAR가 무엇인지 설명할 필요는 없겠지만 글의 완성도를 위해 설명을 포함할 것입니다. JAR는 Jave archive이고 기본적으로 관련된 메타데이터, 리소스와 함께 많은 클래스 파일을 포함하는 하나의 파일입니다.

반응형
반응형

출처 

http://stackoverflow.com/questions/7872846/how-to-read-from-standard-input-non-blocking

자바에서 표준 입력을 non-blocking으로 읽는 방법?

    long end=System.currentTimeMillis()+60*10;
    InputStreamReader fileInputStream=new InputStreamReader(System.in);
    BufferedReader bufferedReader=new BufferedReader(fileInputStream);
    try
    {
        while((System.currentTimeMillis()<end) && (bufferedReader.readLine()!=null))
        {

        }
        bufferedReader.close();
    }
    catch(java.io.IOException e)
    {
        e.printStackTrace();
    }

저는 600밀리초 안에 읽기 위해 위에처럼 시도하였습니다만 bufferedReader가 blocking되어 readline에서 읽기가 되지 않습니다. 제발 도와주세요.

----

5 개의 답변 중 1개의 답변만 추려냄.

역자주 : available() 메소드가 Java 1.5에는 없어서 ready() 메소드를 사용하여 문제를 해결하였습니다.

long end=System.currentTimeMillis()+60*10;
InputStreamReader fileInputStream = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(fileInputStream);
try {
    while ((System.currentTimeMillis() < end)) {
        if (bufferedReader.ready()) {
            System.out.println(bufferedReader.readLine());
        }
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (bufferedReader != null) {
            bufferedReader.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}


반응형
반응형

출처 : http://stackoverflow.com/questions/24671049/query-for-a-relation-between-calendar-object-and-espers-eql


There is a class becoming event objects. 

객체가 되려는 다음과 같은 클래스가 있습니다.

class StockTickEvent { Calendar timestamp; ... }


Also, there is an EQL statement. 

또한, 다음과 같은 EQL 문장이 있습니다.

select * from StockTickEvent.win:ext_timed(timestamp, 10 seconds)


Is the class right or valid for this EQL statement? If so, what type can timestamp be? For example, the type of timestamp can be Calendar, Date, or long(unix time value).

이 클래스가 이 EQL 문장에 맞나요? (유효한가요?) 그렇다면 timestamp 변수 타입은 무엇이 될 수 있나요? 예를 들자면 Calendar, Date, long이 있습니다.


답변

The ext-timed data window takes an expression returning a long value. You could add a method to the event returning the long-msec for the calendar.

ext-timed 데이터 윈도우는 long 값을 리턴하는 표현을 취합니다. calendar(로 사용한 변수)에 대해 long-msec을 리턴하는 이벤트를 가지는 메소드를 추가해야 합니다.

반응형

+ Recent posts