Tajo에서 특히 Python으로 UDF를 작성할 수 있는지 궁금합니다. 나의 유스 케이스는 어떤 ID (브라우저 ID)로 로그 레코드를 그룹화 한 다음 동일한 그룹의 레코드를 타임 스탬프로 정렬하고 마침내 UDF를 사용하여 각 그룹의 정렬 된 레코드로 이동하려는 ETL을위한 것이다.Tajo에서 UDF를 작성하는 방법
답변
나는 Tajo PMC 회원입니다. Tajo에 관심을 가져 주셔서 감사합니다.
현재 Tajo는 아직 Python UDF를 지원하지 않습니다. 그러나 Tajo는 각 단일 함수 서명에 대해 여러 개의 UDF 함수 구현을 갖도록 설계되었습니다. Python 함수 UDF 기능을 Tajo에 쉽게 추가 할 수 있습니다.
이제 사용자 정의 기능을 위해 Java 기반 Java를 사용해야합니다. 사용자 정의 UDF를 구현하는 두 가지 f}이 있습니다. 물론, 두 방법 모두 매우 쉽습니다.
첫 번째 방법은 기존 Tajo UDF 인터페이스를 사용하는 것입니다. 이런 식으로 각 함수 구현은 GeneralFunction 클래스를 상속받은 클래스 여야합니다. eval()은 각 UDF 구현의 본문입니다. 예를 들면 다음과 같습니다 :
@Description(
functionName = "pow",
description = "x raised to the power of y",
example = "> SELECT pow(9.0, 3.0)\n"
+ "729",
returnType = FLOAT8,
paramTypes = {
@ParamTypes(paramTypes = {FLOAT8, FLOAT8})
}
)
public class Pow extends GeneralFunction {
public Pow() {
super(new Column[] {
new Column("x", FLOAT8),
new Column("y", FLOAT8)
});
}
@Override
public Datum eval(Tuple params) {
Datum value1Datum = params.get(0);
Datum value2Datum = params.get(1);
if(value1Datum instanceof NullDatum || value2Datum instanceof NullDatum) {
return NullDatum.get();
}
return DatumFactory.createFloat8(Math.pow(value1Datum.asFloat8(), value2Datum.asFloat8()));
}
}
또 다른 방법은 새로운 함수 인터페이스를 사용하는 것입니다. 이 f}으로 각 UDF에 대한 정적 메소드 만 구현하면됩니다. 함수의 각 정적 메소드는 하나 이상의 Java 원시 유형 또는 Java 오브젝트 유형 매개 변수를 가질 수 있습니다.
각 매개 변수가 프리미티브 또는 개체 유형인지 여부에 따라 각 매개 변수는 암시 적으로 다른 효과를가집니다. 기본 유형 인수가 NULL 값을 허용하지 않습니다. 이 경우 매개 변수에 NULL 값이 있으면이 함수는 실제로 함수를 호출하지 않고 NULL 값을 자동으로 반환합니다. SQL의 3 값 논리를 사용하면 이와 같은 NULL 처리가 SQL 함수에서 매우 일반적입니다. 기본적으로 Tajo는이 기능을 제공합니다.
프리미티브와 매개 변수 함수의 예 : 반대로
@ScalarFunction(name = "pow", returnType = FLOAT8, paramTypes = {FLOAT8, FLOAT8})
public static double pow(double x, double y) {
return Math.pow(x, y);
}
개체 유형 파라미터는 NULL 값을 허용한다. 이 경우, 각각의 기능은 명시 적으로 다음과 같이 NULL 값을 처리해야하십시오 Tajo 클러스터에 자신의 UDF를 추가하려면
@ScalarFunction(name = "pow", returnType = FLOAT8, paramTypes = {FLOAT8, FLOAT8})
public static Double pow(Double x, Double y) {
if (x == null || y == null) {
return null;
}
return Math.pow(x, y);
}
, 당신은 당신의 자신의 기능 클래스를 포함하는 jar 파일을 확인해야합니다. 현재 Tajo는 사용자가 런타임에 사용자 정의 jar를 추가하는 것을 허용하지 않습니다. 따라서 사용자 정의 jar를 $ {TAJO_HOME}/lib에 복사 한 다음 Tajo 클러스터를 재시작해야합니다.
또한 Tajo는 사용자가 런타임에 함수를 곧 추가 할 수 있도록 CREATE FUNCTION 기능을 지원합니다.
- 1. Scala에서 Pig UDF를 작성하는 방법
- 2. 하이브에 사용자 정의 집계 함수를위한 Python UDF를 작성하는 방법
- 3. Entity Framework에서 테이블 반환 UDF를 호출하는 방법?
- 4. PHP 스크립트는 hadoop 돼지의 UDF를 작성하는 데 사용할 수 있습니까?
- 5. MySQL에 UDF를 추가하는 방법은 무엇입니까?
- 6. Windows에서 mysql udf를 설치하는 방법 WAMP
- 7. Standard SQL - WebUI에서 BigQuery UDF를 사용하는 방법?
- 8. BigQuery - Java 클라이언트에서 UDF를 등록하는 방법
- 9. 스파크 UDF를 사용하여 복잡한 유형을 반환하는 방법
- 10. SQL Server : 가능한 경우 UDF를 호출하는 방법?
- 11. Excel UDF를 프로그래밍 방식으로 제거하는 방법
- 12. udf를 사용하여 varchar에서 varbyte로?
- 13. 보기에서 CLR 테이블 반환 UDF를 호출해야합니다.
- 14. UDF를 DATEFIRST 설정과 별도로 설정하십시오.
- 15. .net에서 Excel UDF를 호출하는 중입니까?
- 16. Pig udf를 사용할 수 없습니다
- 17. Sproc에서 UDF를 여러 번 사용하기
- 18. MySQL UDF를 설치할 수 없습니다.
- 19. 여러 행에서 UDF를 어떻게 실행합니까?
- 20. UDF를 사용하여 열의 기본값으로 사용
- 21. 돼지 - 파이썬 udf를 사용하여 데이터 집합의 속도를 계산하는 방법
- 22. 쿼리 문자열을 가져와 쿼리의 결과 집합을 반환하는 UDF를 만드는 방법
- 23. SELECT 또는 UPDATE 문에서 T-SQL UDF를 사용하는 방법?
- 24. 돼지 UDF를 받는다는 내 돼지 UDF를 컴파일 할 때 나는 다음과 같은 오류를 얻고있다 WritableComparable
- 25. 인덱스 간격에 따라 값을 얻는 UDF를 작성하는 방법은 무엇입니까? 내가 문자열 값과 시작 인덱스 번호를 사용하는 UDF를 작성하고 같은 수를 계산하려면
- 26. LINQ 쿼리에서 매개 변수를받는 UDF를 사용한 쿼리
- 27. Frontend에서 UDF를 호출 할 수 있습니까?
- 28. MySQL 용 UDF를 Python으로 작성할 수 있습니까?
- 29. spark 2.0에서 UDF를 SparseVector 열에 적용
- 30. 선택에서 스칼라 UDF를 테이블 반환 함수로 변환합니다.