以纯文本形式保存具有复杂模式的pyspark数据帧以供测试

以纯文本形式保存具有复杂模式的pyspark数据帧以供测试,pyspark,Pyspark,如何为pyspark生成干净的测试数据?我已经想出了一些看起来很好的办法,但部分似乎有点尴尬,所以我在这里发布 假设我有一个数据帧df,它有一个复杂的模式和少量的行。我想把测试数据签入我的回购协议。我不想要二进制文件。在这一点上,我不确定最好的方式继续-但我想我有一个类似的文件 test_fn.py 它里面有这个 schema_str='struct<eventTimestamp:timestamp,list_data:array<struct<valueA:string,v

如何为pyspark生成干净的测试数据?我已经想出了一些看起来很好的办法,但部分似乎有点尴尬,所以我在这里发布

假设我有一个数据帧
df
,它有一个复杂的模式和少量的行。我想把测试数据签入我的回购协议。我不想要二进制文件。在这一点上,我不确定最好的方式继续-但我想我有一个类似的文件

test_fn.py
它里面有这个

schema_str='struct<eventTimestamp:timestamp,list_data:array<struct<valueA:string,valueB:string,valueC:boolean>>>' 
现在我把这些行放在我的
test\u fn.py
文件中,或者我可以在repo中有一个
.json
文件

现在要运行测试,我必须使用正确的模式和本文中的数据创建一个数据框架。spark解析简单字符串的唯一方法似乎是使用它创建一个数据帧,也就是说,我不能将该简单字符串传递给
from_json
函数?所以这有点尴尬,这就是为什么我认为我应该发布-

schema2 = spark.createDataFrame(data=[], schema=schema_str).schema
lns = # say I read the lns back from above 
df_txt = spark.createDataFrame(data=lns, schema=T.StringType())
我看到df_txt只有一列名为“value”

df_json = df_txt.select(F.from_json('value', schema=schema2).alias('xx'))
sel = ['xx.%s' % nm for nm in df_json.select('xx').schema.fields[0].dataType.fieldNames()]
df2 = df_json.select(*sel)
现在
df2
应该与
df1
相同-我在
deepdiff
模块中看到了这种情况

df_json = df_txt.select(F.from_json('value', schema=schema2).alias('xx'))
sel = ['xx.%s' % nm for nm in df_json.select('xx').schema.fields[0].dataType.fieldNames()]
df2 = df_json.select(*sel)