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

hof1towb  于 2021-07-09  发布在  Spark
关注(0)|答案(4)|浏览(345)

我是PySpark3.0的新手,我有一个家庭作业,我需要修改字符串( geolocation )元组数字数据类型( geolocation1 ).
这是我的密码:

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

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

输出:
|                    地理位置            | 地理位置1|
|

cngwdvgl

cngwdvgl1#

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

vaqhlq812#

在回答这个问题之前,我想提出一些建议
首先,你需要了解什么是双重类型。在这里,您盲目地将包含非数字字符的字符串转换为数字格式。因此,内部spark将抛出一个异常,该异常将被捕获,null将作为输出填充。
从field的名字来看,这是一个地理位置,它是经纬度的组合。所以我假设给你这个作业的人需要这两个值作为新的列。如果我的假设是正确的,下面是实现它的方法之一。

hjzp0vay

hjzp0vay4#

(-37.80899950140.96004459)空              
(-37.80899952140.96004451)空              

我做错什么了?

相关问题