我有一个包含布尔列的sql表。
示例my_table
:
column_1 column_2 column_3 column_4
-----------------------------------------
AA BB CC false
---------------------------------------
CC FF JJ true
我只想在条件column_1
下选择column_2
和column_4=true
来创建新的dataset
。
我提取新数据集的代码:
def create_dataset(my_table):
output = (
my_table.select(
F.col('column_1').alias('first_name'),
F.col('column_2').alias('last_name'))
.withColumn('first_name', F.when(F.col('first_name').isin(["NULL", None, ""]), None).otherwise(F.col('first_name')))
.withColumn('last_name', F.when(F.col('last_name').isin(["NULL", None, ""]), None).otherwise(F.col('last_name')))
)
return output
我添加了一个过滤器,以将column_4 is true
所在的行作为行。
我的新代码:
def create_dataset(my_table):
output = (
my_table.select(
F.col('column_1').alias('first_name'),
F.col('column_2').alias('last_name')).where("column_4"=true)
.withColumn('first_name', F.when(F.col('first_name').isin(["NULL", None, ""]), None).otherwise(F.col('first_name')))
.withColumn('last_name', F.when(F.col('last_name').isin(["NULL", None, ""]), None).otherwise(F.col('last_name')))
)
return output
当我在哪里使用时,出现此错误:
keyword can't be an expression
如何根据布尔值column_4 =true
过滤数据?
谢谢
答案 0 :(得分:1)
这是一个布尔列。因此,它在where子句或when子句中有效。
df.show()
+---+-----+
| id| bool|
+---+-----+
| 1| true|
| 2|false|
+---+-----+
df.printSchema()
root
|-- id: long (nullable = true)
|-- bool: boolean (nullable = true)
df.where("bool").show() # or df.where(F.col("bool")).show()
+---+----+
| id|bool|
+---+----+
| 1|true|
+---+----+
df.select(F.when(F.col('bool'), 'bar').otherwise("foo")).show()
+------------------------------------+
|CASE WHEN bool THEN bar ELSE foo END|
+------------------------------------+
| bar|
| foo|
+------------------------------------+
答案 1 :(得分:0)
这应该有效:output_df = my_table.filter(my_table.column_4 == True).select('column_1', 'column_2')