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

新手上路,请多包涵

使用 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)

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

原文由 chaotic3quilibrium 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

概括:

Apache Spark 的 SQLApache Hive 部分兼容。因此,大多数可以用 Hive 编写的 SQL 都可以用 Spark SQL 编写。

细节:

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

 INT(someStringValue)

因此,要使原始发布问题中的 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)

原文由 chaotic3quilibrium 发布,翻译遵循 CC BY-SA 3.0 许可协议

Haroun 关于在 Sql 中进行转换的回答对我有用。但 请注意,如果字符串中的数字大于 integer ,结果将是 null 。对于大于 integerlongbigint )的数字,演员表应如下所示:

 CAST(Sum_GN_POP as BIGINT)

原文由 Reza 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进