我正在使用AWS Glue,需要将Redshift数据仓库模式中的布尔值(True和False)列转换为另一个Redshift模式中的“是” /“否”。目前,在AWS Glue GUI中似乎没有一种简单的方法。
我在这里一直按照以下指南操作:https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-transforms-map.html
并创建函数:
def ConvertBoolean(dataFrame,ColumnName):
dataFrame["booleanTransform"] = {}
if dataFrame[ColumnName] == True:
dataFrame["booleanTransform"] = "Yes"
else:
dataFrame["booleanTransform"] = "No"
del dataFrame[ColumnName]
dataFrame[ColumnName] = {}
dataFrame[ColumnName] = dataFrame["booleanTransform"]
del dataFrame["booleanTransform"]
return dataFrame
但是不知道该函数应该存储在哪里或如何传递动态框架,因为所提供的文档示例中并未对此进行说明。
如何在AWS Glue的pyspark代码中最好地做到这一点?
答案 0 :(得分:1)
您真的必须为此使用Glue吗?听起来,简单的CTAS似乎更省时又省钱:
CREATE TABLE newtable
-- you may also want to set DIST and SORTKEYs for the newtable here
AS
SELECT
CASE my_bool_column
WHEN TRUE THEN 'Yes'
ELSE 'No'
END::VARCHAR(3) as my_bool_column,
all_other_columns
FROM oldtable;
答案 1 :(得分:1)
如果您使用的是 redshift,为什么不编写一个为您执行此操作的 sql 脚本。我认为你不需要用胶水做任何事情。
无论如何,如果您仍然需要使用 glue
执行此操作,只需使用 Apache Spark DataFrame:
df.withColumn("columnName", when(df.columnName, lit('Yes').otherwise(lit('No'))
可以使用 fromDF()
函数转换回 DynamicDataframe。