Pyspark SQL Выберите, но с функцией?

#sql #pyspark

Вопрос:

Я смотрю на этот SQL-запрос:

 SELECT 
  tbl.id as id,
  tbl. as my_name,
  tbl.account as new_account_id,
  CONVERT_TIMEZONE('UTC', 'America/Los_Angeles', tbl.entry_time)::DATE AS my_time
FROM tbl
 

Мне интересно, как бы я преобразовал это в фрейм данных Pyspark?

Допустим, я загрузил tbl файл CSV в Pyspark, например:

 tbl_dataframe = spark...load('/files/tbl.csv')

 

Теперь я хочу использовать SELECT в этом фрейме данных что-то вроде:

 final_dataframe = tbl_dataframe.select('id', 'name', ...)
 

Проблема здесь в том,:

  1. Как мне переименовать это » имя » в «мое имя» с помощью этого выбора?
  2. Возможно ли вообще применить эту CONVERT_TIMEZONE функцию с помощью select в фрейме данных? Каков наилучший/стандартный подход для этого?

Ответ №1:

  1. Как мне переименовать это » имя » в «мое имя» с помощью этого выбора?

Предполагая, что ваш фрейм данных выглядит следующим образом

 #  --- ---- 
# | id|name|
#  --- ---- 
# |  1| foo|
# |  2| bar|
#  --- ---- 
 

Существует несколько различных способов сделать это «переименование».:

 
df.select(F.col('name').alias('my_name')) # you select specific column and give it an alias
#  ------- 
# |my_name|
#  ------- 
# |    foo|
# |    bar|
#  ------- 

# or
df.withColumn('my_name', F.col('name')) # you create new column with value from old column
#  --- ---- ------- 
# | id|name|my_name|
#  --- ---- ------- 
# |  1| foo|    foo|
# |  2| bar|    bar|
#  --- ---- ------- 

# or
df.withColumnRenamed('name', 'my_name') # you rename column
#  --- ------- 
# | id|my_name|
#  --- ------- 
# |  1|    foo|
# |  2|    bar|
#  --- ------- 
 
  1. Возможно ли вообще применить эту CONVERT_TIMEZONE функцию с помощью select в фрейме данных? Каков наилучший/стандартный подход для этого?

CONVERT_TIMEZONE это не стандартная функция Spark, но если это функция улья, которая уже где-то зарегистрирована, вы можете попробовать это F.expr('convert_timezone()')