Dataframe 如何在连接多个表后处理空值
我通过连接4个数据帧来创建一个新的数据帧 之后,我需要连接来自不同数据帧的两个相同列 数据: 问题: 如果我在不替换空值的情况下执行concat;我散播信息 所以加入之后,;由于pyspark不删除公共列,因此我们从两个表中有两个Account列 我试着用空字符串替换它;它不工作并抛出错误:dataframe不可迭代 查询: 如何在连接表后用空字符串替换空值? 或者是否有任何方法可以在同一时间处理null和concatDataframe 如何在连接多个表后处理空值,dataframe,apache-spark,pyspark,apache-spark-sql,concatenation,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Concatenation,我通过连接4个数据帧来创建一个新的数据帧 之后,我需要连接来自不同数据帧的两个相同列 数据: 问题: 如果我在不替换空值的情况下执行concat;我散播信息 所以加入之后,;由于pyspark不删除公共列,因此我们从两个表中有两个Account列 我试着用空字符串替换它;它不工作并抛出错误:dataframe不可迭代 查询: 如何在连接表后用空字符串替换空值? 或者是否有任何方法可以在同一时间处理null和concat df = df1\ .join(df2,"code",how = 'left
df = df1\
.join(df2,"code",how = 'left') \
.join(df3,"id",how = 'left')\
.join(df4,"id",how = 'left')\
.withColumn('Account',F.when(df2('Account').isNull(),'').otherwise(df2('Account')))\
.withColumn('Account',F.when(df3('Account').isNull(),'').otherwise(df3('Account')))\
.withColumn("Account",F.concat(F.trim(df2.Account), F.trim(df3.Account)))
大家好,欢迎来到StackOverflow。像
pyspark.sql.functions.concat\ws
这样的函数应该在这里起作用,例如:
import pyspark.sql.functions as f
df = spark.createDataFrame([
(1, "John", "Smith"),
(2, "Monty", "Python"),
(3, "Donald", None),
], ['id', 'firstname', 'lastname']
)
df.show()
+---+---------+--------+
| id|firstname|lastname|
+---+---------+--------+
| 1| John| Smith|
| 2| Monty| Python|
| 3| Donald| null|
+---+---------+--------+
df.select(
"*",
f.concat_ws(
"",
f.trim(f.col("firstname")), f.trim(f.col("lastname"))
).alias("concatenated")
).show()
+---+---------+--------+------------+
| id|firstname|lastname|concatenated|
+---+---------+--------+------------+
| 1| John| Smith| JohnSmith|
| 2| Monty| Python| MontyPython|
| 3| Donald| null| Donald|
+---+---------+--------+------------+
希望这对您有所帮助,您可以在此处找到有关函数的更多信息:您好,谢谢您,但是,加入后会出现问题…因为两列的名称相同…我使用withColumn和used tablename['colname]…这两个函数都不起作用..加入后如何使用concat函数
import pyspark.sql.functions as f
df = spark.createDataFrame([
(1, "John", "Smith"),
(2, "Monty", "Python"),
(3, "Donald", None),
], ['id', 'firstname', 'lastname']
)
df.show()
+---+---------+--------+
| id|firstname|lastname|
+---+---------+--------+
| 1| John| Smith|
| 2| Monty| Python|
| 3| Donald| null|
+---+---------+--------+
df.select(
"*",
f.concat_ws(
"",
f.trim(f.col("firstname")), f.trim(f.col("lastname"))
).alias("concatenated")
).show()
+---+---------+--------+------------+
| id|firstname|lastname|concatenated|
+---+---------+--------+------------+
| 1| John| Smith| JohnSmith|
| 2| Monty| Python| MontyPython|
| 3| Donald| null| Donald|
+---+---------+--------+------------+