更改数据类型,但为数据帧返回空值

2024-10-03 04:29:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的密码:

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

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

输出:

|地理定位|地理定位1 |
|---------------------------------------------------------------------------------------------------\br/> |(-37.80899950140.96004459)|空|
|(-37.80899952140.96004451)|空|

我做错了什么


Tags: 字符串from定位importsql数字地理pyspark
2条回答

在回答这个问题之前,我想提出一些建议

  1. 首先,您需要了解什么是双重类型。在这里,您盲目地将包含非数字字符的字符串转换为数字格式。因此,内部spark将抛出一个异常,该异常将被捕获,null将作为输出填充

  2. 正如我从field的名字所理解的,它是一个地理位置,是纬度和经度的组合。所以我假设给你这个作业的人需要这两个值作为新的列。如果我的假设是正确的,下面是实现它的方法之一

enter image description here

如果有这样的字符串,可以删除括号并用逗号分隔,然后强制转换为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)

相关问题 更多 >