pyspark-drop复制列

vxf3dgd4  于 2021-05-27  发布在  Spark
关注(0)|答案(4)|浏览(536)

我使用的是PySpark2.4.0,我有一个数据框,下面有列

a,b,b
0,1,1.0
1,2,2.0

如果没有任何连接,我只能保留b列中的一个,并删除另一个b列
我怎样才能做到这一点

gmxoilav

gmxoilav1#

这也许对你有帮助,
将Dataframe转换为rdd,提取所需字段并转换回Dataframe,

from pyspark.sql import Row

rdd = df.rdd.map(lambda l: Row(a=l[0], b=l[1]))

required_df = spark.creataDataFrame(rdd)

+---+---+
|  a|  b|
+---+---+
|  0|  1|
|  1|  2|
+---+---+
ohfgkhjo

ohfgkhjo2#

当我加入时,我也遇到了同样的情况。最佳做法是在加入表之前重命名列:您可以参考以下链接:
sparkDataframe区分名称重复的列
从两个同名列中选择一个列很容易混淆,因此最好的方法是在一个Dataframe中不要有同名列。

0wi1tuuw

0wi1tuuw3#

也许这是有帮助的-

val df = Seq((0, 1, 1.0), (1, 2, 2.0)).toDF("a", "b", "b")
 df.show(false)
    df.printSchema()

    /**
      * +---+---+---+
      * |a  |b  |b  |
      * +---+---+---+
      * |0  |1  |1.0|
      * |1  |2  |2.0|
      * +---+---+---+
      *
      * root
      * |-- a: integer (nullable = false)
      * |-- b: integer (nullable = false)
      * |-- b: double (nullable = false)
      */
    df.toDF("a", "b", "b2").drop("b2").show(false)
    /**
      * +---+---+
      * |a  |b  |
      * +---+---+
      * |0  |1  |
      * |1  |2  |
      * +---+---+
      */
fdx2calv

fdx2calv4#

试试这个:

col_select = list(set(df.columns))
df_fin = df.select(col_select)

相关问题