【问题标题】:Selecting map key as column in dataframe in spark在火花中选择映射键作为数据框中的列
【发布时间】:2015-10-05 09:31:08
【问题描述】:

我有一个来自 cassandrasql 的数据框,我有一个列,它是数据框中的地图 喜欢

scala> df.printSchema
root
 |-- client: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)

我需要从 df 中选择一些列以及从地图中选择特定键作为 df 中的列,而不是完整的地图

假设我有一张地图 键1->值1 键 2 -> 值 2 ....

我只需要从数据框中的地图中选择 key1 作为新数据框中的一列。我该怎么做呢

我也在使用 cassandrasqlcontext.sql 来获取数据框。

【问题讨论】:

    标签: apache-spark spark-dataframe


    【解决方案1】:

    使用 SparkSQL(假设您将数据框注册为“df”)

    context.registerDataFrameAsTable(df,"df")
    val newDf =context.sql("select client.key,client.value from df where client.key='some value'")
    

    【讨论】:

    • 非常感谢阿蒙。由于我是新来的火花,你能告诉我如何在 df 上运行查询吗?我有一个 cassandrasqlcontext。
    • 我把它作为一个答案。有效。在最新的 spark 1.5 context.registerDataFrameAsTable(df,"df") 更改为 df.registerTempTable
    • 它也不工作。我试过用它,它没有用
    【解决方案2】:

    假设 Spark2 和 pyspark,这对我有用:

    SparkSQL:

    df.registerTempTable("table_name")
    spark.sql("select client.key1 from table_name")
    spark.sql("select client.key1, client.key2 from table_name")
    
    

    使用数据框 (df):

    df.select("client.key1").show()
    df.select("client.key1", "client.key2").show()
    

    【讨论】:

      【解决方案3】:

      在 spark sql 中试试这个:

      select map_filter(your_map_name, (k,v) -> k == 'desired_key) from spark_table
      

      这将为您提供整个 key:value 作为输出。如果您只想要该值,请尝试以下操作:

      select map_values(map_filter(your_map_name, (k,v) -> k == 'desired_key)) from spark_table
      

      【讨论】:

        猜你喜欢
        • 2019-09-17
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 2018-09-26
        • 2022-01-02
        • 2019-03-30
        相关资源
        最近更新 更多