我有一个来自cassandrasql的数据框,我有一个列,它是数据帧中的一个映射 像
scala> df.printSchema
root
|-- client: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
我需要从df中选择一些列以及将地图中的特定键作为df中的列,而不是完整的地图
假设我有一张地图 key1 - >值1 key2 - >值2 ....
我只需要从数据框中的map中选择key1作为新数据帧中的一列。我怎么能这样做
我也使用cassandrasqlcontext.sql来获取数据帧。
答案 0 :(得分:2)
使用SparkSQL(假设您将数据框注册为“df”)
context.registerDataFrameAsTable(df,"df")
val newDf =context.sql("select client.key,client.value from df where client.key='some value'")
答案 1 :(得分:1)
假设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()
答案 2 :(得分:0)
在 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