Логическое преобразование AWS Glue

Я использую AWS Glue, и мне нужно преобразовать логические (True и False) столбцы в схеме хранилища данных Redshift в значения «Да» / «Нет» в другой схеме Redshift. В настоящее время не существует простого способа сделать это в графическом интерфейсе пользователя AWS Glue.

Я следовал руководству здесь: 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

Но не знаю, где должна храниться функция или как передать динамический фрейм, поскольку это не указано в приведенном примере документации.

Как это лучше всего реализовать в pyspark-коде AWS Glue?


person Sauron    schedule 11.10.2018    source источник
comment
Вы нашли хороший пример этого? Я застрял в одном и том же месте - документация неполная и как / где определять преобразование.   -  person Peter    schedule 20.05.2020


Ответы (2)


Неужели для этого нужно использовать клей? Похоже, что простой 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;
person botchniaque    schedule 17.10.2018
comment
Да, мне интересно, нужна ли для этого работа Glue Spark. Если вы хотите делать это ежедневно, вы можете написать SQL-запрос (аналогичный приведенному выше) и выполнить его в задании оболочки Glue python. - person Sandeep Fatangare; 09.06.2019

Если вы используете красное смещение, почему бы вам не написать сценарий sql, который сделает это за вас. Не думаю, что с клеем нужно что-то делать.

В любом случае, если вам все еще нужно сделать это с помощью glue, просто используйте Apache Spark DataFrame:

df.withColumn("columnName", when(df.columnName, lit('Yes').otherwise(lit('No'))

Преобразование обратно в DynamicDataframe можно выполнить с помощью функции fromDF().

person Pau    schedule 22.04.2021