Python 读取spark Json文件后未保留列顺序
我尝试使用spark.read.json读取json文件,但默认情况下,列顺序是按spark排序的 有很多嵌套列/新列频繁添加到架构中,我无法为所有列定义架构 在读取spark.read.json时,有没有办法在不手动定义模式的情况下保持列顺序 例如: 正如您所见,zip是源json字符串中的第一个键,但Spark将该列保留为最后一个键 我尝试过使用json的模式,但仍然没有保留列顺序:Python 读取spark Json文件后未保留列顺序,python,json,scala,apache-spark,pyspark,Python,Json,Scala,Apache Spark,Pyspark,我尝试使用spark.read.json读取json文件,但默认情况下,列顺序是按spark排序的 有很多嵌套列/新列频繁添加到架构中,我无法为所有列定义架构 在读取spark.read.json时,有没有办法在不手动定义模式的情况下保持列顺序 例如: 正如您所见,zip是源json字符串中的第一个键,但Spark将该列保留为最后一个键 我尝试过使用json的模式,但仍然没有保留列顺序: spark.sql("""select schema_of_json('{&q
spark.sql("""select schema_of_json('{"zip":"a","address":{"state":"la","pin":"1234","city":"go"},"street":"bar","building":"123"}') as json_schema""").show(10,False)
#+----------------------------------------------------------------------------------------------------+
#|json_schema |
#+----------------------------------------------------------------------------------------------------+
#|struct<address:struct<city:string,pin:string,state:string>,building:string,street:string,zip:string>|
#+----------------------------------------------------------------------------------------------------+
请告诉我是否有任何方法可以在不手动定义模式的情况下保持顺序
谢谢你的帮助 您可以使用select定义订单
df = spark.read.json(sc.parallelize([json_str]))
df.select("zip","address".....).show()
您可以使用select定义订单
df = spark.read.json(sc.parallelize([json_str]))
df.select("zip","address".....).show()
谢谢Michael,是的,我们可以这样做。选择,但正如问题中提到的,我希望在不手动包含模式的情况下保留顺序!啊,好的。我猜可能有一种方法可以满足您的需求,但不值得这么做。谢谢Michael,是的,我们可以这样做。选择,但正如问题中提到的,我一直在寻找在不手动包含模式的情况下保持顺序的方法!啊,好的。我的猜测是,可能有一种方法可以满足您的需要,但这并不值得。如果您不将schema传递给spark.read.json,spark将从您的json文件中获取一个示例,并从中推断出schema。如果您不将模式传递给spark.read.json,spark将从您的json文件中获取一个样本,并从中推断模式。您可以手动执行同样的操作来动态提取模式,然后使用它吗?