【问题标题】:Spark DataFrame equivalent to Pandas Dataframe `.iloc()` method?Spark DataFrame 等效于 Pandas Dataframe `.iloc()` 方法?
【发布时间】:2016-09-26 00:16:15
【问题描述】:

有没有办法使用整数按位置引用 Spark DataFrame 列?

Analogous Pandas DataFrame 操作:

df.iloc[:0] # Give me all the rows at column position 0 

【问题讨论】:

    标签: pandas scala apache-spark dataframe apache-spark-sql


    【解决方案1】:

    Python df.iloc 的等价物是 collect

    PySpark 示例:

    X = df.collect()[0]['age'] 
    

    X = df.collect()[0][1]  #row 0 col 1
    

    【讨论】:

    • collect() 在将数据集的所有元素(从所有节点)检索到驱动程序节点时,会很快导致大型数据帧上的内存错误,因此只能在小型数据集上使用。
    【解决方案2】:

    不是真的,但你可以试试这样的:

    Python

    df = sc.parallelize([(1, "foo", 2.0)]).toDF()
    df.select(*df.columns[:1])  # I assume [:1] is what you really want
    ## DataFrame[_1: bigint]
    

    df.select(df.columns[1:3])
    ## DataFrame[_2: string, _3: double]
    

    斯卡拉

    val df = sc.parallelize(Seq((1, "foo", 2.0))).toDF()
    df.select(df.columns.slice(0, 1).map(col(_)): _*)
    

    注意

    Spark SQL 不支持并且不太可能支持行索引,因此无法跨行维度进行索引。

    【讨论】:

      【解决方案3】:

      你可以在 spark-shell 中这样使用。

      scala>: df.columns  
      Array[String] = Array(age, name)
      
      scala>: df.select(df.columns(0)).show()
      +----+
      | age|
      +----+
      |null|
      |  30|
      |  19|
      +----+
      

      【讨论】:

        【解决方案4】:

        从 Databricks 上的 Spark 3.1.1 开始,只需选择感兴趣的列并应用限制:

        %python
        retDF = (inputDF
            .select(col(inputDF
                .columns[0]))
            .limit(100)
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-07-08
          • 2017-03-17
          • 2020-03-14
          • 2016-01-29
          • 1970-01-01
          • 2017-11-27
          相关资源
          最近更新 更多