Как я могу получить доступ к переменной в Pyspark, как в Scala, используя s & $ - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть код ниже, который используется для копирования данных из таблицы HIVE в HDFS в режиме добавления в виде файла Parquet.

from pyspark.sql.functions import current_date, date_format, date_sub
from datetime import datetime, timedelta
import datetime
q = """select label_yyyy_mm_dd
        ,label_yyyy_mm
        ,q_media_name
        ,a_accepted
        ,a_end_ts
        ,a_media_name
        ,a_resource_name
        ,a_start_ts
        ,k_callpurpose
        ,k_srf
        ,q_entry_ordinal
        ,q_interaction_id
        ,q_interaction_type
        ,q_ixn_resource_id
        ,q_resource_name
        ,a_consult_rcv_warm_engage_time
        ,a_consult_rcv_warm_hold_time
        ,a_consult_rcv_warm_wrap_time
        ,a_customer_handle_count
        ,a_customer_talk_duration
        ,a_interaction_resource_id
        ,a_interaction_id
        ,a_wrap_time
        a_technical_result
        ,k_ixn_type
        ,k_ixn_type_source
        ,k_transfer_count
        ,k_language
        ,k_agentauth
        ,k_auth,k_rg
        ,k_channel
        ,k_gms_result
        ,k_connid
        ,k_rbcprimaryid
        ,k_agent_id
        ,a_interaction_resource_ordinal 
    from prod_T0V0_cct0.cct0_gim_measures_gold A 
    inner join prod_T0V0_cct0.yle0_gim_date_time B on A.a_start_date_time_key = B.date_time_key 
    where label_yyyy_mm_dd = date_format(date_sub(current_date(), 1), 'y-MM-dd')
  """
date = (datetime.date.today()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')
spark.sql(q).write.mode('append').parquet('hdfs:/prod/11323/app/H9A0/data/T0V0/DIG/info_gold_chat.parquet/label_yyyy_mm_dd=$date')

Файл паркета необходимо переместить, создав папку в соответствии со значениемпеременной «дата».Однако это вызывает синтаксическую ошибку, так как я могу понять, что в приведенном выше пути есть 's' и '$', которые предназначены для Scala, а не для Pyspark.Я попытался удалить их оба, и это работает, однако файлы идут и помещаются в имя папки «date», которое, я думаю, воспринимается как постоянное, а не переменное значение.

Может кто-нибудь помочь мне с тем, какзаписать файлы паркета в папку с именем в формате Day-1 (% y-% m-% d)?

1 Ответ

0 голосов
/ 25 сентября 2018

Проблема с последней строкой, я проверил данные в оболочке Pyspark, они дают правильный результат.Используйте правильное форматирование строки в последней строке в PySpark, как показано ниже:

date = (datetime.date.today()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')

date # Testing the date value in PySpark Shell.
'2018-09-24'

spark.sql(q).write.mode('append').parquet('hdfs:/prod/11323/app/H9A0/data/T0V0/DIG/info_gold_chat.parquet/label_yyyy_mm_dd=%s' %date')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...