如何在pyspark中给已有的列添加虚拟记录?

afdcj2ne  于 2023-02-11  发布在  Spark
关注(0)|答案(1)|浏览(179)

我有一个 Dataframe ,我想在每个 Dataframe 中添加一个虚拟记录,为此,我从一个parquet文件中读取一个 Dataframe ,并创建一个列表,然后使用python dict(zip())添加它们,下面是代码片段。

prem_df = read_parquet_file(folder_path, logger)
row_list = prem_df.select(col("cat")).collect()
y = [o[0] for o in row_list]          
t = y.append("ABC")

row_list1 = prem_df.select(col("Val")).collect()
x = [o[0] for o in row_list1]          
p = x.append("23.54")

dict(zip(t, p))

但不确定如何再次创建 Dataframe ,因为我需要将其合并回DF prem_df
基本上,我想将ABC添加到"cat"列的末尾,将"23.54"添加到"Val"列的末尾,这样,如果我对"cat" == "ABC进行过滤,我将得到"Val"作为23.54

df.filter("cat" == "ABC).select(col("cat", "val")

注:Parquet文件共有43列,请建议。。谢谢

vzgqcmou

vzgqcmou1#

你可以简单地concat。

df = spark.createDataFrame([['cat1', 1]], ['cat', 'Val'])
df.show(truncate=False)

df.withColumn('cat', f.concat(f.col('cat'), f.lit('ABC'))) \
  .withColumn('Val', f.concat(f.col('Val'), f.lit(23.54))) \
  .show(truncate=False)

+----+---+
|cat |Val|
+----+---+
|cat1|1  |
+----+---+

+-------+------+
|cat    |Val   |
+-------+------+
|cat1ABC|123.54|
+-------+------+

相关问题