Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PySpark解码一列并提取为多列_Pyspark_Pyspark Sql - Fatal编程技术网

使用PySpark解码一列并提取为多列

使用PySpark解码一列并提取为多列,pyspark,pyspark-sql,Pyspark,Pyspark Sql,给定:我有以下pySpark数据帧: s_df.show(10) +-------------+--------------------+-------+--------------------+ |时间戳|值|质量|属性| +-------------+--------------------+-------+--------------------+ |1506846688201 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3| |15068467144

给定:我有以下pySpark数据帧:

s_df.show(10)
+-------------+--------------------+-------+--------------------+
|时间戳|值|质量|属性|
+-------------+--------------------+-------+--------------------+
|1506846688201 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3|
|1506846714421 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3|
|1506853046041 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3|
|1506853069411 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3|
|1506853175701 | eyJGbG9vcl9OdW1iZ…| 3 |[WrappedArray(0.3|
|1506853278721 | eyJWYWx1ZSI6ICJOQ…| 3 |[WrappedArray(0.3|
|1506853285741 | eyJWYWx1ZSI6ICJOQ…| 3 |[WrappedArray(0.3|
|1506853313701 | eyJWYWx1ZSI6ICJOQ…| 3 |[WrappedArray(0.3|
|1506856544461 | eyJJbnNlcnRUaW1lI…| 3 |[WrappedArray(0.3|
|1506856563751 | eyJJbnNlcnRUaW1lI…| 3 |[WrappedArray(0.3|
+-------------+--------------------+-------+--------------------+
仅显示前10行
目标:我想解码
列,并将数据提取到如下所示的数据帧中:

计数器持续时间EventEndTime…楼层号插入时间值
0 1.0 2790 1506846690991…NA 1507645527691 0
0 1.0 2760 1506846717181…NA 1507645530751 0
0 1.0 5790 1506853051831…北美1509003670478北美
0 1.0 6060 1506853075471…北美1509003671231北美
0 1.0 3480 1506853179181…北美1509003671935北美
0 1.0 2760 1506853281481…北美1509004002809北美
0 1.0 3030 1506853288771…北美1509004003249北美
0 1.0 2790 1506853316491…北美1509004004038北美
0 1.0 3510 1506856547971…北美1509003922437北美
0 1.0 3810 1506856567561…北美1509003923116北美
难度:我可以解码,但无法在
pySpark
中提取
dict
。我最终在
pandas
中完成。我想在
pySpark
中完成所有操作

我的尝试

我使用以下
udf
以以下方式解码
列:

def解码_值(x):
返回base64.b64解码(x)
udf_myFunction=udf(解码_值,StringType())
结果=ts_df.withColumn('value',udf_myFunction('value'))
要获得以下信息:

结果显示(10)
+-------------+--------------------+-------+--------------------+
|时间戳|值|质量|属性|
+-------------+--------------------+-------+--------------------+
|1506846688201 |{“楼层编号”:…| 3 |[WrappedArray(0.3|
|1506846714421 |{“楼层编号”:…| 3 |[WrappedArray(0.3|
|1506853046041{“楼层编号”:…| 3 |[WrappedArray(0.3|
|1506853069411 |{“楼层编号”:…| 3 |[WrappedArray(0.3|
|1506853175701{“楼层编号”:…| 3 |[WrappedArray(0.3|
|1506853278721 |{“值”:“NA”,“3”[WrappedArray(0.3|
|1506853285741{“值”:“NA”,“3”[WrappedArray(0.3|
|1506853313701 |{“值”:“NA”,“3”[WrappedArray(0.3|
|1506856544461 |{“插入时间”:15…| 3 |[WrappedArray(0.3|
|1506856563751 |{“插入时间”:15…| 3 |[WrappedArray(0.3|
+-------------+--------------------+-------+--------------------+
value
列显示为一个
dict
,因此我在pandas中执行以下操作:

将熊猫作为pd导入
从pandas.io.json导入json_规范化
result2=result.toPandas()
final_df=result2.value.apply(json.loads).apply(json_normalize).pipe(lambda x:pd.concat(x.values))
总目终稿()
计数器持续时间EventEndTime…楼层编号插入时间值
0 1.0 2790 1506846690991…NA 1507645527691 0
0 1.0 2760 1506846717181…NA 1507645530751 0
0 1.0 5790 1506853051831…北美1509003670478北美
0 1.0 6060 1506853075471…北美1509003671231北美
0 1.0 3480 1506853179181…北美1509003671935北美
0 1.0 2760 1506853281481…北美1509004002809北美
0 1.0 3030 1506853288771…北美1509004003249北美
0 1.0 2790 1506853316491…北美1509004004038北美
0 1.0 3510 1506856547971…北美1509003922437北美
0 1.0 3810 1506856567561…北美1509003923116北美
我试图创建另一个
udf
函数,但没有成功:

def convert_dict_to_columns(x):
df_out=x.apply(json.loads).apply(json_normalize).pipe(lambda y:pd.concat(y.values))
返回dfu
#将dict转换为列
udf\U convert\U d2c=udf(将dict\U转换为列,StringType())
最终结果=result.withColumn('value',udf\u convert\u d2c('value'))
你知道我该怎么做吗

以下是我的最低可行代码:

将熊猫作为pd导入
df=pd.DataFrame(列=['Timestamp','value'])
df.loc[:,'Timestamp']=[1501891200,1501891200,1501891200,1501891200,1501891200,1501891200,1501891200]
df.loc[:,'value']=[{“楼层编号”:“NA”,“值”:0.0,“插入时间”:1507645527691,“事件开始时间”:1506846688201},
{“楼层编号”:“NA”,“值”:0.0,“插入时间”:1507645527691,“事件开始时间”:1506846688201},
{“楼层编号”:“NA”,“值”:0.0,“插入时间”:1507645527691,“事件开始时间”:1506846688201},
{“楼层编号”:“NA”,“值”:0.0,“插入时间”:1507645527691,“事件开始时间”:1506846688201},
{"