Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 如何在连接多个表后处理空值_Dataframe_Apache Spark_Pyspark_Apache Spark Sql_Concatenation - Fatal编程技术网

Dataframe 如何在连接多个表后处理空值

Dataframe 如何在连接多个表后处理空值,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

我通过连接4个数据帧来创建一个新的数据帧 之后,我需要连接来自不同数据帧的两个相同列 数据:

问题: 如果我在不替换空值的情况下执行concat;我散播信息 所以加入之后,;由于pyspark不删除公共列,因此我们从两个表中有两个Account列 我试着用空字符串替换它;它不工作并抛出错误:dataframe不可迭代

查询: 如何在连接表后用空字符串替换空值? 或者是否有任何方法可以在同一时间处理null和concat

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|
+---+---------+--------+------------+