【问题标题】:SAS merge in SparkSpark 中的 SAS 合并
【发布时间】:2022-06-23 21:41:14
【问题描述】:

我正在将 SAS 代码转换为 Spark。在其中一个数据步骤中,SAS 正在进行合并。 我需要在 Spark 中实现相同的目标。请帮我完成这项工作。

SAS 代码:

proc sort data=dat1;by mbr_sys_id clm_aud_nbr2;run;
proc sort data=dat2;by mbr_sys_id clm_aud_nbr2;run;

data want;
 merge dat1(in=a)
    dat2(in=b);
    by mbr_sys_id clm_aud_nbr2;
    if a and b;
run;

火花代码:

val want=dat1.as("a").join(dat2.as("b"), dat1("mbr_sys_id")===dat2("mbr_sys_id") && 
    dat1("clm_aud_nbr2")===dat2("clm_aud_nbr2"),"inner")

SAS 的输出: SAS output

Spark 的输出: Spark output

所以 SAS 只给出三行,但 spark 给出 6 行,我被告知将输出作为 SAS。

【问题讨论】:

  • Spark代码没有问题,结果符合预期。满足连接条件的 2 x 3 行。如果你不想这样,你可以先尝试右表的左连接
  • 是的,我知道它给出了 2*3 但如何获得像 SAS 合并。
  • 我不确定“合并”的概念在 SAS 中的作用。你能解释一下吗?这是什么语义?好的,我读过了。 SAS Merge 从第一个文件中获取一条记录,如果它们具有相同的列,则在第二个文件中匹配一条记录。加入从第一个文件中获取一条记录,如果它们具有相同的列,则与第二个文件中的所有记录匹配。
  • 您是否尝试将distinct() 添加到数据框?
  • SAS 合并就像join,但是当有many to many join 时,它是这样完成的。在 Dat1 中有 2 行,在 Dat2 中有 3 行。所以 Dat1 第一行与 dat2 第一行和第二行连接到 dat2 的第二行,下一个 dat2 有三行,现在 dat2 用完了所有行......现在 dat1 将继续提供它的数据集的最后一行,这最后一行将用于连接 dat2 中的其余行。

标签: apache-spark apache-spark-sql sas


【解决方案1】:

我发现这个 gitbook 有 sas 合并的 pyspark 代码。 https://joshylchen.gitbook.io/technical-documentation/sas_pyspark/sas_merge-and-pyspark

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多