相关疑难解决方法(0)

加入后如何避免重复列?

我有两个包含以下列的数据框:

df1.columns
//  Array(ts, id, X1, X2)
Run Code Online (Sandbox Code Playgroud)

df2.columns
//  Array(ts, id, Y1, Y2)
Run Code Online (Sandbox Code Playgroud)

我之后

val df_combined = df1.join(df2, Seq(ts,id))
Run Code Online (Sandbox Code Playgroud)

我最终得到以下列:Array(ts, id, X1, X2, ts, id, Y1, Y2).我可以预期公共列将被删除.有什么额外的东西需要做吗?

scala apache-spark apache-spark-sql

41
推荐指数
5
解决办法
5万
查看次数

如何在spark中具有不同列数的两个DataFrame上执行并集?

我有2 DataFrame秒如下:

来源数据

我需要像这样的工会:

在此输入图像描述

unionAll功能不起作用,因为列的数量和名称不同.

我怎样才能做到这一点?

apache-spark apache-spark-sql

40
推荐指数
9
解决办法
5万
查看次数

PYSPARK - 在多个列上加入 nullsafe

假设我们有两个数据帧,我们想要将它们与左反连接进行比较:

data1 = [
  (1, 11, 20, None),
  (2, 12, 22, 31),
]

data2 = [
  (1, 11, 20, None),
  (2, 12, 22, 31),
]

schema = StructType([ \
    StructField("value_1",IntegerType(), True), \
    StructField("value_2",IntegerType(), True), \
    StructField("value_3",IntegerType(), True), \
    StructField("value_4",IntegerType(), True), \
])

df1 = spark.createDataFrame(data=data1,schema=schema)
df2 = spark.createDataFrame(data=data2,schema=schema)
Run Code Online (Sandbox Code Playgroud)

如何通过多个(所有)列 nullsafe 连接这些数据帧?我想出的唯一解决方案如下:

df = df1.join(df2, \
    ((df1.value_1.eqNullSafe(df2.value_1)) &
    (df1.value_2.eqNullSafe(df2.value_2)) &
    (df1.value_3.eqNullSafe(df2.value_3)) &
    (df1.value_4.eqNullSafe(df2.value_4))),
    "leftanti" \
)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我们现在必须处理大量列的动态列表。我们如何以某种方式重写此连接,以便我们可以提供要连接的列的列表。

感谢和BR

python join apache-spark-sql pyspark databricks

2
推荐指数
1
解决办法
1619
查看次数