2017-12-21 9 views

答えて

1

あなたが必要なのは

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

以下のようにudf関数を定義し、.withColumn APIを使用してudf関数を呼び出すことである

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

ロングコンバータにJavaの進を使用することができます

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

TL; DRconv標準機能を使用してください。

CONV(NUM:カラム、fromBase:INT、toBase:INT):カラムは別のベースからの文字列の列に番号を変換します。次のようにconvソリューションで

は次のようになります。

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はあなたの入力欄のタイプの結果を与えるという特徴を持っているので、私は文字列で始まり、文字列を得ました。

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| 
+------+-----+-------+ 
関連する問題