AWS Glue布尔转换

时间:2018-10-11 20:20:24

标签: amazon-web-services amazon-redshift aws-glue

我正在使用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代码中最好地做到这一点?

2 个答案:

答案 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。