Сложный SQL-запрос с использованием PySpark Назначение месяцев на квартал - PullRequest
0 голосов
/ 28 октября 2019

Мне дали этот сложный SQL-запрос. В наборе данных df_acct я хотел бы назначить определенные месяцы кварталам из переменной Run_Date, которая извлекается из предыдущего CRC набора данных. Как я могу изменить этот код так, чтобы для месяцев 2-4 был назначен Q1, для месяцев 5-7 - Q2 и так далее?


spark=SparkSession\
.builder\
.appName("Python Spark Dataframe")\
.config(conf = SparkConf())\
.getOrCreate()

sc = spark.sparkContext
sqlContext = SQLContext(sc)

########################
# Loading source files #
########################

# Load files for CRC data
df_crc = sqlContext.read.parquet("/appdata/TF/TF_Official/CRCS_LDU/crcs_ldu*") \
  .select("TF_consumer_id", "Run_Date", "fsa", (col("go30")/12).alias("age"), "go90", "as115", "cvsc100") \
  .replace(0, None, subset="as115").replace(-8, None, subset="cvsc100")

df_crc.printSchema()

df_crc.createOrReplaceTempView("df_crc")

# Load files for trade-level data
df_acct = sqlContext.read.parquet("/appdata/TU/TF_Official/Account/account_2009-{01,07}*",
  "/appdata/TF/TF_Official/Account/account_201[0-9]-{01,07}*") \
  .select("TF_Consumer_ID","TF_Trade_ID","Joint_Account_ID","Primary_Indicator", \
          "ACCT_TYPE","PRODUCT_TYPE","CLOSED_INDIC","NARRATIVE_CODE1","NARRATIVE_CODE2","Insurance_Indicator", \
          "CREDIT_LIMIT","HIGH_CREDIT_AMT","BEST_AMT_FLAG", \
          "CURRENT_BALANCE","CHARGOFF_AMT","MOP","PAYMT_PAT","L3","MONTHS_REVIEWED","ACCT_AGE", \
          to_date("Run_Date").alias("Run_date"), \
          to_date(concat(col("LAST_UPDATED_DT").substr(1,4),lit("-"), \
            col("LAST_UPDATED_DT").substr(5,2),lit("-"), \
            col("LAST_UPDATED_DT").substr(7,2))).alias("LAST_UPDATED_date"), \
          to_date(concat(col("OPENED_DT").substr(1,4),lit("-"), \
                         col("OPENED_DT").substr(5,2),lit("-"), \
                         col("OPENED_DT").substr(7,2))).alias("OPENED_date"), \
          to_date(concat(col("FILE_SINCE_DT").substr(1,4),lit("-"), \
                         col("FILE_SINCE_DT").substr(5,2),lit("-"), \
                         col("FILE_SINCE_DT").substr(7,2))).alias("FILE_SINCE_date") ) \
  .where("PRODUCT_TYPE RLIKE '^(BC)$'")

df_acct.createOrReplaceTempView("df_acct")

...