Apache spark 如何在PySpark中将map_keys()中的值拆分为多列

Apache spark 如何在PySpark中将map_keys()中的值拆分为多列,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个数据框,它有一个模式和一个映射,如下所示: root |-- events: map (nullable = true) | |-- key: string | |-- value: string (valueContainsNull = true) 当我分解它或使用map_keys()获取这些值时,我得到以下数据帧: +--------------------+--------------------+ | map_data|

我有一个数据框,它有一个模式和一个映射,如下所示:

root
 |-- events: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)
当我分解它或使用map_keys()获取这些值时,我得到以下数据帧:

+--------------------+--------------------+
|            map_data|          map_values|
+--------------------+--------------------+
|[[{event_name=walk..|[{event_name=walk...|
|[[{event_name=walk..|          2019-02-17|
|[[{event_name=walk..|            08:00:00|
|[[{event_name=run...|[{event_name=walk...|
|[[{event_name=fly...|          2019-02-17|
|[[{event_name=run...|            09:00:00|
+--------------------+--------------------+
这是我访问上面的数据帧显示的代码:

events=event\u数据\
.withColumn(
“地图数据”,
F.映射值(事件数据事件)
)
events.printSchema()
事件。选择(“映射数据”)
.withColumn(
“映射值”,
F.explode(事件、地图和数据)
).表演(10)
从我开始的时候,我会认为这是一个里程碑,但是,我希望我的数据帧看起来像这样:

+--------------------+-----------+--------+
|          events    |     date  |   time |
+--------------------+-----------+--------+
|[{event_name=walk...| 2019-02-17|08:00:00|
|[{event_name=walk...| 2019-02-17|09:00:00|
+--------------------+-----------+--------+
我一直在研究,我看到人们正在利用udf,但是,我确信有一种方法可以完全通过数据帧和sql函数实现我想要的

要了解更多信息,请参阅没有.show(truncate=False)时我的行的外观


另外,对于我现在使用的dataframe,我这里的问题是了解如何将数组分解为多列。我之所以提到这一点,是因为我可以使用它,或者执行更有效的过程,根据我得到的映射创建数据帧。

我找到了解决问题的方法。我需要使用这种方法()并在
event\u data
上执行这一系列计算,这是我初始化的数据帧

这就是我的数据帧现在的样子

|25769803776|2019-03-19|[{event_name=walk, duration=0.47, x=0.39, y=0.14, timestamp=08:02:30.574892}, {event_name=walk, duration=0.77, x=0.15, y=0.08, timestamp=08:02:50.330245}, {event_name=run, duration=0.02, x=0.54, y=0.44, timestamp=08:02:22.737803}, {event_name=run, duration=0.01, x=0.43, y=0.56, timestamp=08:02:11.629404}, {event_name=run, duration=0.03, x=0.57, y=0.4, timestamp=08:02:22.660778}, {event_name=run, duration=0.02, x=0.49, y=0.49, timestamp=08:02:56.660186}]|08:02:00|

您能否使用
.show(truncate=False)
|25769803776|2019-03-19|[{event_name=walk, duration=0.47, x=0.39, y=0.14, timestamp=08:02:30.574892}, {event_name=walk, duration=0.77, x=0.15, y=0.08, timestamp=08:02:50.330245}, {event_name=run, duration=0.02, x=0.54, y=0.44, timestamp=08:02:22.737803}, {event_name=run, duration=0.01, x=0.43, y=0.56, timestamp=08:02:11.629404}, {event_name=run, duration=0.03, x=0.57, y=0.4, timestamp=08:02:22.660778}, {event_name=run, duration=0.02, x=0.49, y=0.49, timestamp=08:02:56.660186}]|08:02:00|