pyspark 分析异常:需要结构类型,但得到的是字符串

h7wcgrx3  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(307)

我已在数据块中创建了一个表

create table TabA (latitude float, longitude float, col1 string,col2 string)

utils.executequery( """ update TabA set col1 = ST_Envelope(col2)""" ) I tried converting this output as string but getting error as _tostring() not supported
utils.executequery(""" optimize TabA """)

utils.executequery( """ update TabA set latitude = col1.Lat""" )
utils.executequery(""" optimize TabA """)

utils.executequery( """ update TabA set longitude= col1.Long""" )
utils.executequery(""" optimize TabA """)

我收到错误
col1#22613:需要结构类型,但得到字符串
我试着将“col1”转换为字符串,但是我无法解决这个异常。我该如何解决它?

thigvfpy

thigvfpy1#

您错误一定是来自col1.Latcol1.Long由于col1是字符串,因此不能使用点.表示法'如col1.Lat',因为此表示法适用于 struct 数据类型,而不是 string
请考虑以下示例:

df = spark.createDataFrame([('x', (1.0, 2.0))], 'string_col:string, struct_col:struct<lat:double,lon:double>')
df.createOrReplaceTempView('TabA')

df.printSchema()

# root

# |-- string_col: string (nullable = true)

# |-- struct_col: struct (nullable = true)

# |    |-- lat: double (nullable = true)

# |    |-- lon: double (nullable = true)

df.show()

# +----------+----------+

# |string_col|struct_col|

# +----------+----------+

# |         x|{1.0, 2.0}|

# +----------+----------+

下面的SQL查询有效,因为我寻址了 struct type列,并成功地提取了字段lon

spark.sql('select struct_col.lon from TabA').show()

# +---+

# |lon|

# +---+

# |2.0|

# +---+

但是下面的SQL查询失败了,因为我试图对 string tyoe列执行同样的操作。

spark.sql('select string_col.lon from TabA').show()

分析异常:无法从string_col#617中提取值:需要struct类型,但得到的是字符串;线路1位置7

相关问题