2017-01-26 26 views
0

私はpyspark.sqlを用いたスパークにCSVファイルをインポートしてによって一時テーブルとしてそれを登録した次のような値を持っている「geo_location」と呼ばれる列がある「geo_table」テーブルでは文字列値から数値コードを取得するには?

import pyspark 
from pyspark.sql import SQLContext 
sc = pyspark.SparkContext() 
from pyspark.sql import HiveContext 

sqlCtx= HiveContext(sc) 
spark_df = sqlCtx.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load("./data/geo_file.csv") 
spark_df.registerTempTable("geo_table") 

アメリカ>テキサス州> 618

アメリカ>ニュージャージー州> 241

米国> NJ

私の質問は、これらのテキスト値を数値に変換するにはどうすればいいですか? SQLまたはpyspark.sqlで?

パンダでは、私は、私の視点から、あなたの問題を解決するために、そこにいくつかの方法をこの

df["geo_location_categories"] = df["geo_location"].astype('category') 
df["geo_location_codes"] = df["geo_location_categories"].cat.codes 

答えて

0

を行うだろう。 「geo_location」列を数値列に変換するだけでよい場合は、UDFを使用できます。また

var df = spark_df.withColumn("geo_location_codes", toInt(spark_df("geo_location"))) 

が、私はそれが可能であるべきだと思う:

val toInt = udf[Int, String](str => { 
    // convert your geo location string into integer using existing business logic 
}) 

その後あなたは次のように、このUDFを使用することができます:あなたは(申し訳ありませんが、Scalaではコード)は次のようにUDFを定義することができます列の型としてUserDefinedTypeを使用します。ただし、使用するSparkのバージョンによって異なります。詳細については、この質問をご覧ください:How to define schema for custom type in Spark SQL?

この情報が役立ちますように。

関連する問題