Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Python 从spark数据帧中的StringType列中断开字典_Python_Apache Spark_Databricks - Fatal编程技术网

Python 从spark数据帧中的StringType列中断开字典

Python 从spark数据帧中的StringType列中断开字典,python,apache-spark,databricks,Python,Apache Spark,Databricks,我有一个spark表,我想在python中阅读(我在databricks中使用Python3),实际上结构如下。日志数据存储在单个字符串列中,但为字典 我怎样把字典里的条目分出来阅读呢 dfstates = spark.createDataFrame([[{"EVENT_ID":"123829:0","EVENT_TS":"2020-06-22T10:16:01.000+0000","RECORD_INDE

我有一个spark表,我想在python中阅读(我在databricks中使用Python3),实际上结构如下。日志数据存储在单个字符串列中,但为字典

我怎样把字典里的条目分出来阅读呢

dfstates = spark.createDataFrame([[{"EVENT_ID":"123829:0","EVENT_TS":"2020-06-22T10:16:01.000+0000","RECORD_INDEX":0},
                                   {"EVENT_ID":"123829:1","EVENT_TS":"2020-06-22T10:16:01.000+0000","RECORD_INDEX":1},
                                   {"EVENT_ID":"123828:0","EVENT_TS":"2020-06-20T21:17:39.000+0000","RECORD_INDEX":0}],
                                   ['texas','24','01/04/2019'],
                                   ['colorado','13','01/07/2019'],
                                   ['maine','14','']]).toDF('LogData','State','Orders','OrdDate')
我要做的是将spark表读入一个数据帧,找到max event timestamp,找到具有该时间戳的行,然后计数并将这些行读入一个具有数据列和日志数据的新数据帧,为event id(不带记录索引)、event date和record index添加列

在下游,我将验证数据,从StringType转换为适当的数据类型,并根据需要填写缺失或无效的值。我一直主张行计数=原始行计数


不过,我唯一坚持的是如何读取此日志数据列并将其更改为我可以使用的内容。spark中的一些东西,如pandas.series()?

您可以使用
dfstates将单个结构类型列拆分为多个列。选择('Logdata.*)
参考以下答案:
一旦有了独立的列,就可以执行标准的pyspark操作,如筛选

是否可以包含数据帧的模式?例如,最终的结构将是。StructType[(StructField('State',StringType(),True),StructField('Orders',IntegerType(),True),StructField('OrdDate',DateType(),True),StructField('EventDate',DateType(),True))]当前结构都是StringType,本质上由于安全问题,sysops有一个通用的解决方案,它通过S3接收日志文件,并将它们全部作为spark表,所有列作为字符串。每个组只看到安装了自己的日志表的数据库。很好,这样就完成了。我从未想到过这一点,但它将字符串列识别为字典,因此我可以执行-dfnew=dfstates.select(dfstates.logdata['EVENT\u ID',dfstates.logdata['EVENT\u TS',dfstates.logdata[RECORD\u INDEX])。正是我需要的,非常感谢。