AWS Glue 布尔转换
Posted
技术标签:
【中文标题】AWS Glue 布尔转换【英文标题】:AWS Glue Boolean Transformation 【发布时间】:2019-03-17 00:33:55 【问题描述】:我正在使用 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 代码中最好地实现这一点?
【问题讨论】:
你找到了一个很好的例子吗?我被困在同一点 - 文档不完整以及如何/在哪里定义转换。 【参考方案1】:你真的必须为此使用胶水吗?听起来好像一个简单的 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;
【讨论】:
是的,我想知道您是否需要 Glue Spark 作业。如果你想每天都做,你可以编写 SQL 查询(类似于上面)并在 Glue python shell 作业中执行它。【参考方案2】:如果您使用的是 redshift,为什么不编写一个为您执行此操作的 sql 脚本。我认为你不需要用胶水做任何事情。
无论如何,如果您仍然需要使用 glue
来完成它,只需使用 Apache Spark DataFrame:
df.withColumn("columnName", when(df.columnName, lit('Yes').otherwise(lit('No'))
可以使用fromDF()
函数转换回 DynamicDataframe。
【讨论】:
以上是关于AWS Glue 布尔转换的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet
从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换
AWS Glue 将字符串值从 postgres 转换为 json 数组
从 MySQL 读取位数据类型并使用 AWS Glue 转换为 Redshift 的问题