我正在努力实现Spark源中的以下场景。有没有人能帮我一下?
源 Dataframe :
ID Col1 Flag1 Flag2 1234 Value1 1 1 5678 Value2 0 1
预期结果:
ID Col1 Flag1 Flag2 1234 Value1 1 0 1234 Value1 0 1 5678 Value2 0 1
lyr7nygr1#
如果您只有两个标志,您可以获取df,只过滤标志1,然后对标志2进行同样的过滤,并在两个df上执行union操作。
union
flag_one = df .withColumn("flag2", lit(0)) .filter(col("flag1") == 1) flag_two = df .withColumn("flag1", lit(0)) .filter(col("flag2") == 1) flag_one.union(flag_two).show()
kd3sttzy2#
它像魅力一样奏效,谢谢。这其中的逻辑太棒了!我有多个标志,但正如您正确地指出的那样,为了处理它们,我使用了for循环。
定义计算(Df):
for_BoW = df.select("Flag3","Flag2") Flag1 = df for col_name in for_BoW.columns: Flag1 = Flag1.withColumn(col_name, F.lit(0)).filter(F.col("Flag1") == 1) for_Flag2 = df.select("Flag3","Flag1") Flag2 = df for col_name in for_Flag2.columns: Flag2 = Flag2.withColumn(col_name, F.lit(0)).filter(F.col("Flag2") == 1) for_Flag3 = df.select("Flag2","Flag1") Flag3 = df for col_name in for_Flag3.columns: Flag3 = Flag3.withColumn(col_name, F.lit(0)).filter(F.col("Flag3") == 1) output = (Flag1.union(Flag2)).union(Flag3) return output
2条答案
按热度按时间lyr7nygr1#
如果您只有两个标志,您可以获取df,只过滤标志1,然后对标志2进行同样的过滤,并在两个df上执行
union
操作。kd3sttzy2#
它像魅力一样奏效,谢谢。这其中的逻辑太棒了!我有多个标志,但正如您正确地指出的那样,为了处理它们,我使用了for循环。
定义计算(Df):