python - 更改数据类型但返回 Dataframe 的空值

标签 python apache-spark pyspark apache-spark-sql

我是 Pyspark 3.0 的新手,我有一项作业,需要将字符串 (geolocation) 更改为元组数字数据类型 (geolocation1)。

这是我的代码:

from pyspark.sql.functions import *
from pyspark.sql.types import *

df = df2.withColumn('geolocation1', col('geolocation').cast('double'))

输出:

|地理定位             |地理位置1 |
| ------------------------------------------------------| ----------------- |
| (-37.80899950, 140.96004459) |空                |
| (-37.80899952, 140.96004451) |空                |

我在这里做错了什么?

最佳答案

如果你有这样的字符串,你可以删除括号并用逗号分隔,然后转换为 array<double> :

import pyspark.sql.functions as F

df = df2.withColumn(
    'geolocation1', 
    F.split(
        F.regexp_replace('geolocation', '[\( \)]', ''), 
        ','
    ).cast('array<double>')
)

df.show(truncate=False)
+----------------------------+---------------------------+
|geolocation                 |geolocation1               |
+----------------------------+---------------------------+
|(-37.80899950, 140.96004459)|[-37.8089995, 140.96004459]|
+----------------------------+---------------------------+

df.printSchema()
root
 |-- geolocation: string (nullable = false)
 |-- geolocation1: array (nullable = false)
 |    |-- element: double (containsNull = true)

关于python - 更改数据类型但返回 Dataframe 的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66810102/

相关文章:

hadoop - 哪个更快?带有 Where 子句的 Spark SQL 或在 Spark SQL 之后在 Dataframe 中使用过滤器

apache-spark - 修改 Spark 数据框中的结构列

python - 如何从 Python 中的文件名中删除前缀?

python - 如何检查函数是否阻塞?

scala - 从另一个 RDD 中减去一个 RDD 无法正常工作

python - 如何将字典列表转换为 Pyspark DataFrame

apache-spark - 监控 Spark 实际工作时间与通信时间

python - 收集错误并发送摘要的最佳方式是什么?

python - 如何编写可选择充当常规函数的 asyncio 协程?

apache-spark - 在不知道作业 ID 的情况下如何获取 Apache Spark 作业进度?