我的问题是:有两个数据框架,信息框架正在构建中。我要做的是根据条件在参考数据框中进行过滤。当key为b时,将value为2作为整个列应用到into表中。输出数据帧是我想要做的最后一个。
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没有loc函数。
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'
这个解:
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|
+---+-----+-----+