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