如何从字符串值中获取数字代码?

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?

希望这些信息对您有用。

【讨论】:

以上是关于如何从字符串值中获取数字代码?的主要内容,如果未能解决你的问题,请参考以下文章

给定一个数组数组,如何从每个值中去掉子字符串“GB”?

将使用 PHP 创建的 csv 文件导入 Excel 时,如何在数字字符串值中保留前导零?

如何从包含字符串的href值中获取li

如何从Java中的字符串值中获取枚举值

从Hashmap的所有值中获取所有嵌套项

如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。