Dataframe 无法在Pypsark中为数据帧添加别名

Dataframe 无法在Pypsark中为数据帧添加别名,dataframe,pyspark,apache-spark-sql,Dataframe,Pyspark,Apache Spark Sql,我正在用Pyspark编写一个简单的数据帧脚本,但无法“别名”数据帧。我做错了什么 from pyspark.sql import SparkSession from pyspark.conf import SparkConf from pyspark.sql.types import IntegerType,StructType,StructField,StringType,IntegerType spark = SparkSession.builder.appName('myDFApp

我正在用Pyspark编写一个简单的数据帧脚本,但无法“别名”数据帧。我做错了什么

from pyspark.sql import SparkSession
from pyspark.conf import SparkConf 
from pyspark.sql.types import IntegerType,StructType,StructField,StringType,IntegerType 

spark = SparkSession.builder.appName('myDFApp').master('local').getOrCreate() 
sc = spark.sparkContext 

input_data = [('retail', '2017-01-03T13:21:00', 134), 
    ('marketing', '2017-01-03T13:21:00', 100)] 
rdd_schema = StructType([StructField('business', StringType(), True), \ 
    StructField('date', StringType(), True), \
    StructField("US.sales", IntegerType(), True)])

input_df = spark.createDataFrame(input_data, rdd_schema)
print('Count= ', input_df.count())

# this line below works 
df_1 = input_df.select((input_df.business).alias('partnership'))

# this line does not work
df_2 = input_df.alias("s"). \
    where(s.date > "2016-01-03") 

df_2.show() 
我得到的错误是:

Count=  2
Traceback (most recent call last):
  File "/home/hadoop/opt/inscape/test_dataframe.py", line 22, in <module>
    where(s.date > "2016-01-03")
NameError: name 's' is not defined
Count=2
回溯(最近一次呼叫最后一次):
文件“/home/hadoop/opt/inscape/test_dataframe.py”,第22行,在
其中(s.日期>“2016-01-03”)
NameError:未定义名称“s”
我做错了什么


谢谢

当您为数据帧别名时,您更改了Spark元数据中的引用名称,而不是Python中的引用变量,在Python中,数据帧名称仍然是
输入值。您可以使用
col
对象访问
s
数据帧。请尝试以下方法修复此问题:

from pyspark.sql.functions import *

df_2 = input_df.alias("s"). \
    where(col("s.date") > "2016-01-03") 

别名与变量名不同。在这里,在您的示例中,您使用它作为变量。我可以给你一个建议。在代码中使用与变量名相同的别名。这会让事情变得更容易。对不起,我没听懂。您可以发布您建议的更新代码行吗?只需使用与您的数据帧名称相同的别名`df_2=input_df.alias(“df_2”)。\其中(df_2.date>“2016-01-03”)`因为您在案例中使用它作为变量。(其中(df_2.date>“2016-01-03”))很抱歉,这也不起作用。我求助于使用df_2=输入其中(输入日期>“2016-01-03”)且有效。我猜不能给DF加别名。