代码之家  ›  专栏  ›  技术社区  ›  Mehdi Ben Hamida

Apache Spark中pyspark的数据帧转置

  •  14
  • Mehdi Ben Hamida  · 技术社区  · 7 年前

    我有一个数据帧 df 具有以下结构:

    +-----+-----+-----+-------+
    |  s  |col_1|col_2|col_...|
    +-----+-----+-----+-------+
    | f1  |  0.0|  0.6|  ...  |
    | f2  |  0.6|  0.7|  ...  |
    | f3  |  0.5|  0.9|  ...  |
    |  ...|  ...|  ...|  ...  |
    

    +-------+-----+-----+-------+------+
    |  s    | f1  | f2  | f3    |   ...|
    +-------+-----+-----+-------+------+
    |col_1  |  0.0|  0.6|  0.5  |   ...|
    |col_2  |  0.6|  0.7|  0.9  |   ...|
    |col_...|  ...|  ...|  ...  |   ...|
    

    我将这两个解决方案联系在一起,但它返回dataframe没有指定使用的方法:

    方法1:

     for x in df.columns:
        df = df.pivot(x)
    

    df = sc.parallelize([ (k,) + tuple(v[0:]) for k,v in df.items()]).toDF()
    

    我怎样才能解决这个问题。

    2 回复  |  直到 6 年前
        1
  •  19
  •   Alper t. Turker    7 年前

    DataFrame :

    df = sc.parallelize([
        ("f1", 0.0, 0.6, 0.5),
        ("f2", 0.6, 0.7, 0.9)]).toDF(["s", "col_1", "col_2", "col_3"])
    
    df.toPandas().set_index("s").transpose()
    s       f1   f2
    col_1  0.0  0.6
    col_2  0.6  0.7
    col_3  0.5  0.9
    

    如果这个数字太大,Spark也帮不上忙。火花 数据帧

        2
  •  2
  •   s510    3 年前

    kdf = df.to_koalas()
    kdf_t = kdf.transpose()
    df_T = kdf_t.to_spark()
    

    编辑:为了有效地访问考拉,您需要定义分区,否则可能会出现严重的性能下降。

    推荐文章