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

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

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

+-----+-----+
|  key|value|
+-----+-----+
|    a|   10|
|    b|   20|
|    c|   50|
|    d|   40|
+-----+-----+

Dataframe (参考)

+-----+-----+
|  key|value|
+-----+-----+
|    a|   42|
|    b|    2|
|    c|    9|
|    d|  100|
+-----+-----+

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

+-----+-----+-----+
|  key|value|const|
+-----+-----+-----+
|    a|   10|    2|
|    b|   20|    2|
|    c|   50|    2|
|    d|   40|    2|
+-----+-----+-----+

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

df_cal = (
    info
    .join(reference)
    .withColumn('const', reference.loc[reference['key']=='b', 'value'].iloc[0])
    .select('key', 'result', 'const')
)

df_cal.show()

以下是系统提醒的升温:

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

c2e8gylq1#

这解决了:

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

相关问题