我在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()))
]))))