[英]Union in loop Pyspark
我有两个数据框
data1 = [{'text': 'We traveled a long way to several beautiful houses to see the cats.', 'lang': 'eng'},
{'text': 'قطعنا شوطا طويلا إلى عدة منازل جميلة لرؤية القطط.', 'lang': 'arb'},
{'text': 'Wir reisten einen langen Weg zu mehreren schönen Häusern, um die Katzen zu sehen.', 'lang': 'deu'},
{'text': 'Nous avons parcouru un long chemin vers plusieurs belles maisons pour voir les chats.', 'lang': 'fra'}]
sdf1 = spark.createDataFrame(data1)
data2 = [{'text': 'Przebyliśmy długą drogę do kilku pięknych domów, aby zobaczyć koty.', 'lang': 'pol'},
{'text': 'Mēs ceļojām garu ceļu uz vairākām skaistām mājām, lai redzētu kaķus.', 'lang': 'lav'},
{'text': 'Kedileri görmek için birkaç güzel eve uzun bir yol kat ettik.', 'lang': 'tur'}]
sdf2 = spark.createDataFrame(data2)
我只想将特定语言行从 sdf2 添加到第一个 dataframe。我用一个循环来完成:
langs = ['pol', 'tur']
for lang in langs:
sdf_l = sdf2.where(F.col('lang') == lang)
sdf_final = sdf1.union(sdf_l)
但它只附加 langs 中最后一种语言的行
这里不需要使用循环。 先过滤sdf2,再用sdf1 unoin。
import pyspark.sql.functions as F
...
langs = ['pol', 'tur']
sdf_final = sdf1.union(sdf2.filter(F.col('lang').isin(langs)))
如果你希望使用循环,你可以定义一个临时变量并与sdf1进行联合。
for lang in langs:
sdf_1 = sdf2.where(F.col('lang') == lang)
sdf1 = sdf1.union(sdf_1)
sdf1.show(truncate=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.