如何从字符串值中获取数字代码?
Posted
技术标签:
【中文标题】如何从字符串值中获取数字代码?【英文标题】:How to get numeric codes from string values? 【发布时间】:2017-01-26 02:12:55 【问题描述】:我已经使用 pyspark.sql 将 csv 文件导入到 spark 中,并通过以下方式将其注册为临时表:
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")
在“geo_table”表中有一个名为“geo_location”的列,其值如下:
美国>TX>618
美国>新泽西州>241
美国>新泽西
我的问题是,如何将这些文本值转换为数值?在 sql 或 pyspark.sql 中?
在 Pandas 中,我会这样做
df["geo_location_categories"] = df["geo_location"].astype('category')
df["geo_location_codes"] = df["geo_location_categories"].cat.codes
【问题讨论】:
【参考方案1】:在我看来,有几种方法可以解决您的问题。如果您只需要将“geo_location”列转换为数字列 - 您可以使用 UDF。您可以通过以下方式定义 UDF(对不起,Scala 中的代码):
val toInt = udf[Int, String](str =>
// convert your geo location string into integer using existing business logic
)
之后,您可以通过以下方式使用此 UDF:
var df = spark_df.withColumn("geo_location_codes", toInt(spark_df("geo_location")))
另外我认为应该可以使用 UserDefinedType 作为列类型。但是,这取决于您使用的 Spark 版本。看看这个问题了解更多信息:How to define schema for custom type in Spark SQL?
希望这些信息对您有用。
【讨论】:
以上是关于如何从字符串值中获取数字代码?的主要内容,如果未能解决你的问题,请参考以下文章
将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?
如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。