我怎样才能从这个字典创建一个数据框
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
我知道这是一个相当基本的问题,但我一生都无法让它发挥作用,而且我 运行 没时间了,所以: 我有一个看起来像这样的字典
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 |