我怎样才能从这个字典创建一个数据框

How can I create a dataframe from this dict

我知道这是一个相当基本的问题,但我一生都无法让它发挥作用,而且我 运行 没时间了,所以: 我有一个看起来像这样的字典

data_dict = {'timestamp': '2019-05-01T06:00:00-04:00', 'data': [0.37948282157787916, 1.5890471705541012, 2.1883813840381885], '_id': '62377385587e549976adfda0'}

如何从中创建数据框?我试过了:

schema = StructType([
  StructField('timestamp', TimestampType(), True),
  StructField('data', ArrayType(DecimalType()), True),
  StructField('_id', StringType(), True)
  ])
df = spark.createDataFrame(data=data_dict, schema=schema)

这给我错误:

TypeError: StructType can not accept object 'timestamp' in type <class 'str'>

但即使我缩小字典并从字典和模式中取出时间戳,我也会得到类似的错误:

TypeError: StructType can not accept object 'data' in type <class 'str'>

非常感谢任何帮助,提前致谢!

编辑:我刚刚发现,只需将 [] 放在 dict 周围,我就能让它工作。但是,如果有人有更不丑陋的解决方案,我会买它

一旦 df 中有了数据,您就可以将列转换为所需的类型,然后 如果需要,进一步展开数据列以将数组的值散布在列中。

data_dict = {'timestamp': '2019-05-01T06:00:00-04:00', 'data': [0.37948282157787916, 1.5890471705541012, 2.1883813840381885], '_id': '62377385587e549976adfda0'}
df=spark.createDataFrame([data_dict]).select('_id',explode('data').alias('data'),col('timestamp').cast(TimestampType()))
_id data timestamp
62377385587e549976adfda0 0.37948282157787916 2019-05-01T06:00:00-04:00
62377385587e549976adfda0 1.5890471705541012 2019-05-01T06:00:00-04:00
62377385587e549976adfda0 2.1883813840381885 2019-05-01T06:00:00-04:00