Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何在新的未处理数据上使用Pysark窗口函数?_Python 3.x_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 3.x 如何在新的未处理数据上使用Pysark窗口函数?

Python 3.x 如何在新的未处理数据上使用Pysark窗口函数?,python-3.x,apache-spark,pyspark,apache-spark-sql,Python 3.x,Apache Spark,Pyspark,Apache Spark Sql,我在pyspark DataFrame上开发了窗口函数,用于计算客户每月每笔交易的总交易金额 例如: 输入表包含以下数据: 窗口函数处理数据并将其插入表中 现在,如果我今天得到了新的事务,我想开发一个代码,将上个月的事务加载到spark dataframe中,并在新行上运行window函数,并将其保存到已处理的表中。当前窗口函数将处理所有行,然后需要手动避免已插入的记录,只插入新记录。当窗口功能持续一年时,这将使用高资源和高内存 #Function to apply window funct

我在pyspark DataFrame上开发了窗口函数,用于计算客户每月每笔交易的总交易金额

例如:

输入表包含以下数据:

窗口函数处理数据并将其插入表中

现在,如果我今天得到了新的事务,我想开发一个代码,将上个月的事务加载到spark dataframe中,并在新行上运行window函数,并将其保存到已处理的表中。当前窗口函数将处理所有行,然后需要手动避免已插入的记录,只插入新记录。当窗口功能持续一年时,这将使用高资源和高内存

#Function to apply window function
def cumulative_total_CR(df, from_column, to_column, window_function):
    intermediate_column = from_column + "_temp"
    df = df.withColumn(from_column,df[from_column].cast("double"))

    df = df.withColumn(intermediate_column,when(col("Flow") == 'C',df[from_column]).otherwise(0))

    df = df.withColumn(to_column, F.sum(intermediate_column).over(window_function))

    return df

def cumulative_total_DR(df, from_column, to_column, window_function):
    intermediate_column = from_column + "_temp"
    df = df.withColumn(from_column,df[from_column].cast("double"))

    df = df.withColumn(intermediate_column,when(col("Flow") == 'D',df[from_column]).otherwise(0))

    df = df.withColumn(to_column, F.sum(intermediate_column).over(window_function))

    return df

#Window Function:

window = (Window.partitionBy("CUSNO").orderBy(F.col(TxnDateTime).cast('long')).rangeBetween(-30,0))

df = load.data.from.hive
#appending TxnDate and TxnTime into new column TxnDateTime with type casting as timestamp and format as 'yyyy-MM-dd HH:mm:ss.SSS'
df = cumulative_total_CR(df, "TXNAMT", "Total_Cr_Monthly_Amt", window_function_30_days)
df = cumulative_total_DR(df, "TXNAMT", "Total_Dr_Monthly_Amt", window_function_30_days)                               

df = saving.data.to.disk for new records

你能给我们提供代码吗?哦,你是如何执行相同的操作的,这样我们可以看到一些帮助的方法……我已经编辑了这个问题并添加了伪代码。请仔细研究一下。几点澄清,你是在看《蜂巢》吗?说明你今天收到一笔新交易你想挑选上月的交易你只想30天后再挑选该日期的记录,或者说今天是10月23日,你得到一笔交易你只想挑选9月的记录并单独处理是的。数据是从Data lake(在本例中是hive)中获取的。在最近30天的记录中进行处理。这是可配置的。。。大约一个月30天,或者一周7天,或者一年365天。在这种情况下,只需从配置单元中提取最后30天的记录并继续处理就更容易了。您是否预见到任何其他问题或复杂情况?