如何在Glue作业中强制转换嵌套数组



我在AWS Glue作业中有这个模式:

root
|-- SortedLenders: array
|    |-- element: struct
|    |    |-- LenderID: string
|    |    |-- MaxProfit: string
|-- FilteredOutDecisions: array
|    |-- element: struct
|    |    |-- ApprovedAmount: string
|    |    |-- Reasons: array
|    |    |    |-- element: int

我可以强制转换FilteredOutDecisions字符串。使用resolvchoice()方法:

test.resolveChoice(specs=[('FilteredOutDecisions[].ApprovedAmount', 'cast:double')])

但我想知道如何castFilteredOutDecisions。字符串。有人能帮我解决这个问题吗?谢谢,提前!

我建议你使用Spark SQL StructType &StructField类。相反,胶水的目的是构建转换。这使得我们可以根据DF定义模式并创建复杂的嵌套模式,从而可以将模式转换为特定类型。

将胶水动态框架转换为spark df,然后,使用上述类。

我找到了解决方案,它工作:我将Glue dynamicFrame转换为Spark dataFrame:df=dyf.toDF(),并将以下代码应用于转换后的数据帧:

import pyspark.sql from functions as F
import pyspark.sql.types from StructType, StructField, ArrayType, StringType
df= df.withColumn('FilteredOutDecisions', F.col('FilteredOutDecisions').cast(ArrayType(
StructType([
StructField("ApprovalStatus", StringType()),
StructField("Reasons", ArrayType(StringType()))
]))))

最新更新