sql - 如何将 String 值转换(或强制转换)为 Integer 值?

标签 sql apache-spark casting

使用 Spark 2.1(在 Databricks 上),我有一个表,由于从 .CSV 文件导入,它有一个 String 类型的列。在对该表的 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)

如果我能找到这方面的文档,那将会很有帮助。我也想用其他类型进行其他类型的转换(或强制转换)。非常感谢任何关于这两者或其中之一的指导。

最佳答案

您可以将其设为 Integer来自 csv文件使用选项 推断架构 像这样 :

val df = spark.read.option("inferSchema", true).csv("file-location")

话虽如此: inferSchema 选项有时会出错,并将类型设置为 String .如果是这样,您可以使用 cast运算符(operator)在 Column
数据框/数据集实现:
val df2 = df.withColumn("Count1", $"Count1" cast "Int" as "landMass").withColumn("Count1", $"Sum_GN_POP" cast "Int" as "totalPopulation")

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)

关于sql - 如何将 String 值转换(或强制转换)为 Integer 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45898806/

相关文章:

mysql - SQLException : You can't specify target table 'p' for update in FROM clause

sql - 在 CASE 表达式中使用 between 谓词

c# - 无法将类型为 'System.Boolean' 的对象转换为类型 'System.String'

java - Spark 流从 Kafka 读取并在 Java 中应用 Spark SQL 聚合

c - 当将指针强制转换为指向包含 union 的结构时

java - Oracle SQL - 计算并发事件数

json - Spark 如何在 Scala 的两个 JSONS 中更改键的数量?

python - 为什么 sortBy() 无法在 Spark 中对数据进行均匀排序?

c# - 将 char 隐式转换为整数有什么好处?

c# - 如何转换此日期并保存到数据库