如何通过其编号而不是名称选择数据框中的列

Posted

技术标签:

【中文标题】如何通过其编号而不是名称选择数据框中的列【英文标题】:How to select a column in a dataframe by its number instead of its name 【发布时间】:2019-11-04 15:55:21 【问题描述】:

我想在 Spark 数据框中按其编号而不是名称来选择一个列。有可能吗?

谢谢

【问题讨论】:

看这里。***.com/questions/51689460/… 首先导入 spark 隐式,它作为一个帮助类使用 $-notation 来访问使用位置索引的列import spark.implicits._ import org.apache.spark.sql.functions._ val child3_DF = parentDF.select("_c0","_c1","_c2","_c8","_c9").show() 我在发布之前已经尝试过了,但它对我不起作用。它查找名为“_c0”的列。线程“主”org.apache.spark.sql.AnalysisException 中的异常:无法解析给定输入列的“_c0”:[meterid、qewr、nevents、fasf、adfet];; '项目 ['_c0, '_c1] +- 关系[meterid#105,nevents#106,adfet#107,qewr#108,fasf#109] JDBCRelation(meterproperties) [numPartitions=1] 【参考方案1】:

如果你想为此编写自己的方法,你可以这样做:

package utils

object Extensions 
    implicit class DataFrameExtensions(df: DataFrame) 
        def selecti(indices: Int*) = 
            val cols = df.columns
            df.select(indices.map(cols(_)):_*)
        
    

现在您可以导入并使用此方法:

import utils.Extensions._

df.selecti(1,2,3)

【讨论】:

以上是关于如何通过其编号而不是名称选择数据框中的列的主要内容,如果未能解决你的问题,请参考以下文章