3

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

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

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

假设我有一个 key1 -> value1 key2 -> value2 ...的映射。

我只需要从数据框中的地图中选择 key1 作为新数据框中的一列。我怎样才能做到这一点

另外我正在使用 cassandrasqlcontext.sql 来获取数据框。

4

3 回答 3

2

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

context.registerDataFrameAsTable(df,"df")
val newDf =context.sql("select client.key,client.value from df where client.key='some value'")
于 2015-07-16T06:00:56.853 回答
1

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

火花SQL:

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()
于 2019-10-26T17:40:08.917 回答
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
于 2021-06-24T12:58:15.303 回答