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
Function Spark窗口功能,这是Spark中的错误吗?_Function_Apache Spark_Pyspark_Window - Fatal编程技术网

Function Spark窗口功能,这是Spark中的错误吗?

Function Spark窗口功能,这是Spark中的错误吗?,function,apache-spark,pyspark,window,Function,Apache Spark,Pyspark,Window,有人能验证这是否是spark中的错误吗?或者我是否对PySpark窗口功能做了一些可怕的错误: 以下是数据帧: 下面是我正在运行的代码,用于替换post_evar8列中的空值: win_mid_desc_ts = Window.partitionBy('post_visid_high_low').orderBy(desc('hit_time_gmt')) step3win = step3win.withColumn("post_evar8", last(col('post_evar8'), i

有人能验证这是否是spark中的错误吗?或者我是否对PySpark窗口功能做了一些可怕的错误:

以下是数据帧:

下面是我正在运行的代码,用于替换post_evar8列中的空值:

win_mid_desc_ts = Window.partitionBy('post_visid_high_low').orderBy(desc('hit_time_gmt'))
step3win = step3win.withColumn("post_evar8", last(col('post_evar8'), ignorenulls=True).over(win_mid_desc_ts))
step3win.orderBy("visit_page_num").show(100, truncate=False)
运行上述代码后,我得到以下结果:

如您所见,window函数更新了post_evar8列中的null值,但也将184545857替换为32526519(请访问第26页和第27页)。不确定替换184545857值的原因

这是JSON中相同的数据帧(可以复制并粘贴到文件中)


以下是唯一命中时间gmt(黄色框)值的示例,post_evar8看起来正确(红色框)。

下面是修改命中时间gmt(黄色框)的示例,因此有两个相似(1590525922)和一个唯一(1590525921)。中间的PASTY EVAR8值从184545857更新到32526519(红色框)。这是错误的。

在这个窗口函数中,我只想更新post_evar8中的空值(不是已经填充的值)。在所有情况下,这看起来都是正确的(绿色框)。hit\u time\u gmt只是提供订单,为什么hit\u time\u gmt中的值会更改post\u evar8的值(在红色框中)?

不,这不是错误

由于在数据帧中具有相同值的
post\u visid\u high\u low
列上应用
partitionBy
,会将数据帧中的整个数据视为一个分区,您将按
hit\u time\u gmt
降序应用顺序,因此最终结果将按如下顺序排列

>>> df.orderBy(F.desc("hit_time_gmt")).show(truncate=False)
+------------+----------+---------------------------------------+--------------+
|hit_time_gmt|post_evar8|post_visid_high_low                    |visit_page_num|
+------------+----------+---------------------------------------+--------------+
|1590525921  |184545857 |3283497750620215155_4391202461688050070|26            |
|1590525921  |32526519  |3283497750620215155_4391202461688050070|28            |
|1590525921  |184545857 |3283497750620215155_4391202461688050070|27            |
|1590524568  |32526519  |3283497750620215155_4391202461688050070|15            |
|1590524568  |32526519  |3283497750620215155_4391202461688050070|14            |
|1590524197  |null      |3283497750620215155_4391202461688050070|2             |
|1590524197  |32526519  |3283497750620215155_4391202461688050070|3             |
|1590524187  |null      |3283497750620215155_4391202461688050070|1             |
+------------+----------+---------------------------------------+--------------+

根据上述结果,
post_evar8
的最后一个值为
32526519
相同的值替换为
post_evar8
列中的其他值


在此
post\u visid\u high\u low
列中添加更多不同的值,尝试运行相同的代码并检查。

Hi@srinivas,我用更多示例更新了原始消息。我编写的窗口代码设计为只更新空值,并且工作正常。为了说明这一点,我还用JSON中的更多记录更新了数据集。为什么我担心非空的post_evar8值会根据hit_time_gmt值进行更新。这仅用于对分区值进行排序。请尝试在代码中设置-ignorenulls=False-step3win=step3win.withColumn(“post_evar8”),last(col('post_evar8'),ignorenulls=True)。结束(win_mid_desc)
>>> df.orderBy(F.desc("hit_time_gmt")).show(truncate=False)
+------------+----------+---------------------------------------+--------------+
|hit_time_gmt|post_evar8|post_visid_high_low                    |visit_page_num|
+------------+----------+---------------------------------------+--------------+
|1590525921  |184545857 |3283497750620215155_4391202461688050070|26            |
|1590525921  |32526519  |3283497750620215155_4391202461688050070|28            |
|1590525921  |184545857 |3283497750620215155_4391202461688050070|27            |
|1590524568  |32526519  |3283497750620215155_4391202461688050070|15            |
|1590524568  |32526519  |3283497750620215155_4391202461688050070|14            |
|1590524197  |null      |3283497750620215155_4391202461688050070|2             |
|1590524197  |32526519  |3283497750620215155_4391202461688050070|3             |
|1590524187  |null      |3283497750620215155_4391202461688050070|1             |
+------------+----------+---------------------------------------+--------------+