如何使用 s 和 $ 访问 Pyspark 中的变量,就像在 Scala 中一样



我在下面有一个代码,用于将数据从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')

需要根据变量"date"的值通过创建文件夹来移动镶木地板文件。但是,这是抛出语法错误,因为我可以理解上面的路径有"s"和"$",它们适用于 Scala 而不是 Pyspark。我尝试删除它们,它可以工作,但是文件会进入文件夹名称"date",我认为它被视为常量而不是变量值。

有人可以帮我如何将镶木地板文件写入文件夹吗 名称为第 1 天 (%y-%m-%d( 格式?

问题出在最后一行,我已经在 Pyspark shell 中测试了数据,它给出了正确的结果。在 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')

最新更新