Dataframe 在select上触发数据帧澄清
我已经创建了一个dataframe ordersDF。下面是模式Dataframe 在select上触发数据帧澄清,dataframe,apache-spark,pyspark,Dataframe,Apache Spark,Pyspark,我已经创建了一个dataframe ordersDF。下面是模式 root |-- order_id: long (nullable = true) |-- order_date: string (nullable = true) |-- order_customer_id: long (nullable = true) |-- order_status: string (nullable = true) 在某些地方,我们使用的是“order\u id”、order\u id、or
root
|-- order_id: long (nullable = true)
|-- order_date: string (nullable = true)
|-- order_customer_id: long (nullable = true)
|-- order_status: string (nullable = true)
在某些地方,我们使用的是“order\u id”、order\u id、ordersDF.order\u id。在什么时候使用哪一个,真的很混乱。
比如说
1)ordersDF.select(order_id).show() -- NameError: name 'order_id' is not defined
ordersDF.where('order_id==9').show() --No error here
2)ordersDF.select('order_id').show() --No error here
3)ordersDF.select(ordersDF.order_id).show()--No error here
4)ordersDF.where('ordersDF.order_id==9').show() --AnalysisException: cannot resolve '`ordersDF.order_id`' given input columns: [order_customer_id, order_date, order_id, order_status]; line 1 pos 0;
据我所知,您在通过专栏时感到困惑。
使用
DF.ColumnName
而不使用任何”
或在单引号下传递列名,如“order\u id”
。您可以使用这些方法中的任何一种来传递列
这应该可以解决您的问题。select和where函数将字符串或列对象作为输入。你把它们弄混了 1a)您希望访问一列,该列是python中变量
order\u id
的名称。但是,您没有定义变量。这是在传递字符串。1b)这是spark SQL,列
order\u id
应该是9
。这转化为从ordersDF中选择*,其中order\u id=9
。这是在传递字符串。2) Spark sql用于选择列,类似于1a。转换为
从ordersDF中选择order\u id
。这是在传递字符串。3) 这里通过
DF.column
传递一个column对象
4) 这里传递一个字符串,它不是列名。Spark实际上可以在列名中包含
(但如果将其保存到配置单元中,则不会)。因此,它正在寻找一个不存在的列。请注意,如果仍要使用表名,可以使用别名ordersDF.alias(“ordersDF”)。选择(“ordersDF.orderId”)
有效。澄清您的确切问题。展示你的努力和错误。查看在某些答案上发布问题的最佳方式。df=spark.createDataFrame([(1,1),(2,2),(3,3)],['id','value'])从pyspark.sql.functions导入df.withColumn(“value_desc”),when('value'==1,'one')。when(df.value==2,'two')。否则('other')。show()我得到的错误是TypeError:condition应该是一列。正如你前面提到的,我在单四分之一中使用了列'Value'。我不太会使用双引号。我是一个初学者。你能帮我解释一下吗。正如你前面提到的,我在单四分之一中使用了'value'列。现在我也尝试了双四分之一,但仍然不能使用df.withColumn(“value_desc”,当(“value”==1,'one')。当(df.value==2,'two')。否则('other'))。如果“value”不起作用,show()使用df.value