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 的问题

在 AWS Glue 中转换其他列的数据类型时,某些列变为空

通过 Terraform 创建的 AWS Glue 中的无效架构错误