데이터 프레임에 99 230/256
과 같은 값을 가진 열이 있습니다. 분수가있는 String입니다. 이중 표현은 99.8984375
입니다.문자열 (분수 포함)을 Spark에서 Double로 변환
Spark에서 이러한 문자열을 Double로 변환하는 변환을 적용하려면 어떻게해야합니까? Spark 1.6.2를 사용 중입니다.
데이터 프레임에 99 230/256
과 같은 값을 가진 열이 있습니다. 분수가있는 String입니다. 이중 표현은 99.8984375
입니다.문자열 (분수 포함)을 Spark에서 Double로 변환
Spark에서 이러한 문자열을 Double로 변환하는 변환을 적용하려면 어떻게해야합니까? Spark 1.6.2를 사용 중입니다.
참고 : 데이터에 적용 할 함수를 직접 정의해야합니다. 스파크는 단지 그것을 사용합니다. 당신이 요구하는 것을 수행하는 것은 내장 된 기능이 아닙니다.
사용중인 API를 지정하지 않았으므로 다음은 간단한 컬렉션에 대한 Python 응답입니다.
또한 Spark 외부에서 실행하고 테스트 할 수 있습니다. 여기
def convertFrac(frac):
parts = frac.split()
whole = numer = 0
denom = 1
if len(parts) == 2:
whole = float(parts[0])
numer, denom = map(float, parts[1].split('/'))
elif len(parts) == 1:
if '/' in parts[0]:
numer, denom = map(float, parts[0].split('/'))
else:
return float(parts[0])
return whole + (numer/denom)
이
>>> sc.parallelize(["99 230/256", "1/100"]).map(convertFrac).collect()
[99.8984375, 0.01]
경고,이 모든 입력 ("-2 -3/5"
로 기록 될 "-2 3/5"
요구와 같은 특히 제외)에서 작동하지 않는 샘플 실행 - 그것은 당신이 필요의 예입니다 할 것.
Scala API를 사용하고 있지만 확실히 도움이됩니다. 음수 값의 범위도 없으므로 함수가 완벽하게 작동합니다. 또한,'spark-sql'의'select' 절 (좋은 생각인지 확실하지 않음)에서 컬럼을 조작하기로 결정했으나 sql (개인 선호도)에서 훨씬 쉽게 찾을 수있었습니다. 코드를 가져 주셔서 감사합니다. – Veenit
Gotcha. 네, 단순한 값 캐스팅과 문자열 분할입니다. 너무 복잡한 것은 아닙니다. –
구문 분석을 위해 udf를 만들어 소수 값을 계산하고 double을 반환해야합니다. – eliasah
예. 나는 동의한다. 내가 미리 정의 된 방법으로 처리 할 수 있는지 찾고 있었지만 당신은 맞습니다. – Veenit