我正在尝试了解 pyspark 中的数据帧别名命令。这是我观察到的。
假设我有一个示例数据框
t1_df = spark.createDataFrame([['a'], ['b']], 'c1: string')
print(t1_df.show())
+---+
| c1|
+---+
| a|
| b|
+---+
现在我已经创建了它的别名
t2_df = t1_df.alias('df1')
如果我从第一个数据帧中选择第二个数据帧的列,它将正常工作,如下
t1_df.select(t2_df.c1)
+---+
| c1|
+---+
| a|
| b|
+---+
但是,如果我尝试使用别名进行相同的操作,则不起作用
t1_df.select(col('df1.c1'))
AnalysisException: [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `df1`.`c1` cannot be resolved. Did you mean one of the following? [`c1`].;
'Project ['df1.c1]
+- LogicalRDD [c1#3311], false
为什么会这样?别名如何工作?我对以下内容没有任何特定目的,我只是感兴趣并尝试一些事情。
我使用的是 Spark 版本 3.4.1
异常消息清楚地告诉
df1.c1
列在t1_df
DataFrame中不存在。
pyspark.errors.exceptions.captured.AnalysisException: [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column or function parameter with name `df1`.`c1` cannot be resolved. Did you mean one of the following? [`c1`]
t2_df.c1
将解析为 Column<'c1'>
& c1
列存在于 t1_df
DataFrame 中,因此它有效。
col('df1.c1')
将解析为 Column<'df1.c1'>
& 这在 t1_df
DataFrame 中不存在,因此它抛出异常 AnalysisException: [UNRESOLVED_COLUMN.WITH_SUGGESTION]