Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/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
Python 读取spark Json文件后未保留列顺序_Python_Json_Scala_Apache Spark_Pyspark - Fatal编程技术网

Python 读取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.read.json读取json文件,但默认情况下,列顺序是按spark排序的

有很多嵌套列/新列频繁添加到架构中,我无法为所有列定义架构

在读取spark.read.json时,有没有办法在不手动定义模式的情况下保持列顺序

例如:

正如您所见,zip是源json字符串中的第一个键,但Spark将该列保留为最后一个键

我尝试过使用json的模式,但仍然没有保留列顺序:

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文件中获取一个样本,并从中推断模式。您可以手动执行同样的操作来动态提取模式,然后使用它吗?