【问题标题】:how to subset a dataframe from a dataframe如何从数据框中子集数据框
【发布时间】:2018-12-11 03:38:42
【问题描述】:

我想从 parquet 文件生成的 df 中子集一个数据帧

+----+-----+----------+-----+-----------------+-----+-----------+-----+
|year|state|count1    |rowId|count2           |rowId|count3     |rowId|
+----+-----+----------+-----+-----------------+-----+-----------+-----+
|2014|   CT|    343477|    0|           343477|    0|     343477|    0|
|2014|   DE|    123431|    1|           123431|    1|     123431|    1|
|2014|   MD|    558686|    2|           558686|    2|     558686|    2|
|2014|   NJ|    773321|    3|           773321|    3|     773321|    3|
|2015|   CT|    343477|    4|           343477|    4|     343477|    4|
|2015|   DE|    123431|    5|           123431|    5|     123431|    5|
|2015|   MD|    558686|    6|           558686|    6|     558686|    6|

我想保留一个“rowId”列并删除其他“rowId”列,并且我还想将 rowId 列设为第一列:

    +----+-----+----------+-----+-----------------+
    rowId||year|state|count1    |count2 |count3   |
    +----+-----+----------+-----+-----------------+-
        0|2014|   CT|    343477|  343477|   343477|
        1|2015|   DE|    123431|  123431|   123431|
        2|2015|   MD|    558686|  558686|   558686|
        3|2015|   NJ|    773321|  773321|   773321|
        4|2015|   CT|    343477|  343477|   343477| 
        5|2015|   DE|    123431|  123431|   123431|
        6|2015|   MD|    558686|  558686|   558686| 

我的尝试:

 df.createOrReplaceTempView("test")
 val sqlDF = spark.sql("SELECT rowId, year, state, count1, count2, count3 from test)

我收到错误:org.apache.spark.sql.AnalysisException:引用“rowId”不明确,可能是:rowId#3356L、rowId#3368L、rowId#3378L、rowId#3388L、rowId#3398L、rowId#3408L . 我怎么做? 谢谢...

【问题讨论】:

    标签: scala apache-spark hadoop bigdata


    【解决方案1】:

    您可以根据索引映射列,如下所示

    df.map(attributes => 
                   (attributes.getInt(3),  
                    attributes.getInt(0),
                    attributes.getString(1),
                    attributes.getInt(2),
                    attributes.getInt(4), 
                   attributes.getInt(6))).
    toDF("rowId", "year", "state", "count1", "count2", "count3").show()
    

    请根据您的列数据类型随意修改上述语句。

    【讨论】:

    • 它说“引用'rowId'不明确,可能是:rowId#3356L, rowId#3368L, rowId#3378L, rowId#3388L, rowId#3398L, rowId#3408L.;"
    • 不,我需要将 rawId 列减少到只有一个,以便我可以进行下一个操作..
    • @Misha,我更新了答案,希望这能解决您的问题
    • @Misha,我更新了代码,我在我的环境中测试了上面的代码,它工作正常,请试试这个告诉我
    • 谢谢@naveen marri,我有一个bigInt 类型,scala 中有getBigInt() 吗?我在 API 中找不到它.. 似乎还缺少一些东西,当我尝试使用该功能时,它说该功能没有完成,好像它没有关闭一样
    猜你喜欢
    • 2016-11-19
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2021-10-02
    • 1970-01-01
    相关资源
    最近更新 更多