2017-12-21 6 views
2

Long 데이터 형식으로 변환하려는 16 진수 코드가있는 Icao 열이있는 DataFrame이 있습니다. Spark SQL에서 어떻게이 작업을 수행 할 수 있습니까?열을 16 진수 문자열로 변환하는 방법은 무엇입니까?

| Icao|count| 
+------+-----+ 
|471F8D|81350| 
|471F58|79634| 
|471F56|79112| 
|471F86|78177| 
|471F8B|75300| 
|47340D|75293| 
|471F83|74864| 
|471F57|73815| 
|471F4A|72290| 
|471F5F|72133| 
|40612C|69676| 

답변

1

당신은 당신이 필요로하는 모든이

java.lang.Long.parseLong(hex.trim(), 16) 

import org.apache.spark.sql.functions.udf 
def hexToLong = udf((hex: String) => java.lang.Long.parseLong(hex.trim(), 16)) 

아래로 udf 함수를 정의 긴 컨버터 자바 진수를 사용하고 .withColumn API를 사용하여 udf 함수를 호출 할 수 있습니다

df.withColumn("Icao", hexToLong($"Icao")).show(false) 
1

TL; DRconv 표준 기능을 사용하십시오.

전환 (NUM : 컬럼, fromBase : INT, toBase : INT) : 컬럼 다른 하나 개의 기지국에서 문자열 열의 수를 변환.

scala> icao.show 
+------+-----+ 
| Icao|count| 
+------+-----+ 
|471F8D|81350| 
|471F58|79634| 
|471F56|79112| 
|471F86|78177| 
|471F8B|75300| 
|47340D|75293| 
|471F83|74864| 
|471F57|73815| 
|471F4A|72290| 
|471F5F|72133| 
|40612C|69676| 
+------+-----+ 

val s1 = icao.withColumn("conv", conv($"Icao", 16, 10)) 
scala> s1.show 
+------+-----+-------+ 
| Icao|count| conv| 
+------+-----+-------+ 
|471F8D|81350|4661133| 
|471F58|79634|4661080| 
|471F56|79112|4661078| 
|471F86|78177|4661126| 
|471F8B|75300|4661131| 
|47340D|75293|4666381| 
|471F83|74864|4661123| 
|471F57|73815|4661079| 
|471F4A|72290|4661066| 
|471F5F|72133|4661087| 
|40612C|69676|4219180| 
+------+-----+-------+ 

conv 당신에게 입력 열의 유형의 결과를주는 기능이 있습니다, 그래서 문자열로 시작하고 문자열을 가지고 :

다음과 같이 conv으로 해결책이 될 수 있습니다.

scala> s1.printSchema 
root 
|-- Icao: string (nullable = true) 
|-- count: string (nullable = true) 
|-- conv: string (nullable = true) 

int를 사용했다면 int를 얻었을 것입니다.

다른 기본 제공 방법 cast을 사용하여 conv의 결과를 캐스팅 할 수 있습니다 (또는 적절한 입력 유형으로 시작).

val s2 = icao.withColumn("conv", conv($"Icao", 16, 10) cast "long") 
scala> s2.printSchema 
root 
|-- Icao: string (nullable = true) 
|-- count: string (nullable = true) 
|-- conv: long (nullable = true) 

scala> s2.show 
+------+-----+-------+ 
| Icao|count| conv| 
+------+-----+-------+ 
|471F8D|81350|4661133| 
|471F58|79634|4661080| 
|471F56|79112|4661078| 
|471F86|78177|4661126| 
|471F8B|75300|4661131| 
|47340D|75293|4666381| 
|471F83|74864|4661123| 
|471F57|73815|4661079| 
|471F4A|72290|4661066| 
|471F5F|72133|4661087| 
|40612C|69676|4219180| 
+------+-----+-------+ 
관련 문제