pyspark 根据条件过滤另一个 Dataframe 后,将值应用到 Dataframe

rqdpfwrv  于 2023-01-01  发布在  Spark
关注(0)|答案(1)|浏览(251)

我的问题:有两个 Dataframe ,其中一个信息帧正在构建中。我想要做的是根据条件在引用 Dataframe 中进行过滤。当键为b时,将值2作为整个列应用到into表。输出 Dataframe 是我想要做的最后一个 Dataframe 。
Dataframe (信息)

  1. +-----+-----+
  2. | key|value|
  3. +-----+-----+
  4. | a| 10|
  5. | b| 20|
  6. | c| 50|
  7. | d| 40|
  8. +-----+-----+

Dataframe (参考)

  1. +-----+-----+
  2. | key|value|
  3. +-----+-----+
  4. | a| 42|
  5. | b| 2|
  6. | c| 9|
  7. | d| 100|
  8. +-----+-----+

下面是我想要的输出: Dataframe (输出)

  1. +-----+-----+-----+
  2. | key|value|const|
  3. +-----+-----+-----+
  4. | a| 10| 2|
  5. | b| 20| 2|
  6. | c| 50| 2|
  7. | d| 40| 2|
  8. +-----+-----+-----+

我已经尝试了几种方法,下面一个是最新的一个我尝试,但系统警告我,pyspark没有锁定功能。

  1. df_cal = (
  2. info
  3. .join(reference)
  4. .withColumn('const', reference.loc[reference['key']=='b', 'value'].iloc[0])
  5. .select('key', 'result', 'const')
  6. )
  7. df_cal.show()

以下是系统提醒的升温:

  1. AttributeError: 'Dataframe' object has no attribute 'loc'
c2e8gylq

c2e8gylq1#

这解决了:

  1. from pyspark.sql.functions import lit
  1. target = 'b'
  2. const = [i['value'] for i in df2.collect() if i['key'] == f'{target}']
  3. df_cal = df1.withColumn('const', lit(const[0]))
  4. df_cal.show()
  1. +---+-----+-----+
  2. |key|value|const|
  3. +---+-----+-----+
  4. | a| 10| 2|
  5. | b| 20| 2|
  6. | c| 30| 2|
  7. | d| 40| 2|
  8. +---+-----+-----+

相关问题