使用PySpark 1.6 / Python 2.7
我具有以下格式的数据,这些数据是从Hive获取的数据帧:
date, stock, price
1388534400, GOOG, 50
1388534400, FB, 60
1388534400, MSFT, 55
1388620800, GOOG, 52
1388620800, FB, 61
1388620800, MSFT, 55
我想以以下格式的json结尾:
GOOG.json:
{
'symbol': 'GOOG',
'first_epoch': 1388534400,
'prices': [50, 52, ... ]
}
日期是该日午夜的纪元,我们的数据可以追溯到10年前(8亿多行)。
“数据”列表对应于每个时期的库存值,其中每个随后的时期是前一个时期+ 86400(即第二天)。
这里的问题是可能可能会丢失数据,因此我需要识别出这些缺失点并替换None
值。
在本机Python中,我构建了datetime
对象的生成器,并将此列表用作有效的历元列表,将其转换为历元。对于每个符号,我遍历有效的历元并将它们与该符号的可用历元进行比较。当检测到缺失的纪元时,返回一个None
值(结果类似'prices': [50, 52, None, 49, 51, ... ]
。这种方法效果很好,但是我不确定如何在PySpark中实现。
答案 0 :(得分:0)
如果您缺少某些股票的完整时期,则可以执行以下操作:
Pyspark在pyspark.sql.DataFrameNaFunctions()
模块中具有完整的Nafunctions目录
DataFrame.fillna()
或DataFrame.na.fill()
可以解决此问题。然后,您可以运行groupBy
,然后按纪元对数据进行分组。