如何将String值转换(或转换)为Integer值?

cha*_*ium 4 sql casting apache-spark

使用Spark 2.1(在Databricks上),我有一个表,它有一个String类型的列,作为从.CSV文件导入的结果.在针对该表的SELECT查询中,我试图在数学运算中使用列值之前将该列的值转换为整数.我一直无法找到正确的Spark SQL"功能"来执行此操作.

下面是SQL的一个示例."TO_NUMBER"不适用于两个字符串中的任何一个; Sum_GN_POP或Count1:

SELECT name AS geohashPrefix3, TO_NUMBER(Sum_GN_POP) AS totalPopulation, TO_NUMBER(Count1) AS landMass
    FROM wayne_geohash3
   WHERE (LENGTH(name) = 3)
Run Code Online (Sandbox Code Playgroud)

如果我能找到相关的文档,将会很有帮助.我也希望与其他类型进行其他类型的转换(或演员表).非常感谢任何一个或两个的指导.

Har*_*edi 10

您可以使用inferSchema选项Integercsv文件中获取它,如下所示:

val df = spark.read.option("inferSchema", true).csv("file-location")
Run Code Online (Sandbox Code Playgroud)

话虽如此:inferSchema选项有时会犯错并将类型设为String.如果是这样,你可以使用cast运营商Column

数据框/数据集实现:

val df2 = df.withColumn("Count1", $"Count1" cast "Int" as "landMass").withColumn("Count1", $"Sum_GN_POP" cast "Int" as "totalPopulation")
Run Code Online (Sandbox Code Playgroud)

SQL实现:

SELECT name AS geohashPrefix3, CAST(Sum_GN_POP as INT) AS totalPopulation, CAST(Count1 AS INT) AS landMass
    FROM wayne_geohash3
   WHERE (LENGTH(name) = 3)
Run Code Online (Sandbox Code Playgroud)


cha*_*ium 5

总结:
Apache Spark 的 SQLApache Hive部分兼容。所以,大多数可以用 Hive 编写的 SQL 都可以用 Spark SQL 编写。

详细信息:
要将 STRING 转换为特定的数字类型(如 INT),可以使用强制转换。强制转换包括用括号将目标括起来,并在括号前加上要更改的类型。例如,演员表可能如下所示:

INT(someStringValue)
Run Code Online (Sandbox Code Playgroud)

因此,要使原始发布问题中的 SQL 起作用,需要将其更改为如下所示(将名为“TO_NUMBER”的原始函数替换为“INT”):

SELECT name AS geohashPrefix3, INT(Sum_GN_POP) AS totalPopulation, INT(Count1) AS landMass
  FROM wayne_geohash3
 WHERE (LENGTH(name) = 3)
Run Code Online (Sandbox Code Playgroud)