Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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 Pyspark:仅从嵌套的json数据中读取某些字段_Python_Json_Apache Spark_Pyspark - Fatal编程技术网

Python Pyspark:仅从嵌套的json数据中读取某些字段

Python Pyspark:仅从嵌套的json数据中读取某些字段,python,json,apache-spark,pyspark,Python,Json,Apache Spark,Pyspark,我正在尝试创建一个spark作业,它可以读入1000个json文件并执行一些操作,然后再次写入文件(s3) 这需要很长时间,而且我的内存一直不足。我知道spark会在没有给出模式的情况下尝试推断模式。显然,要做的事情是在读入时提供模式。但是,模式会随着文件的不同而变化,这取决于许多不重要的因素。所有文件中大约有100个“核心”列,这些是我唯一想要的 是否可以使用pyspark编写一个只将我想要的特定字段读取到spark中的部分模式?首先,建议使用一个jsonl文件,其中每个文件都包含一个json

我正在尝试创建一个spark作业,它可以读入1000个json文件并执行一些操作,然后再次写入文件(s3)

这需要很长时间,而且我的内存一直不足。我知道spark会在没有给出模式的情况下尝试推断模式。显然,要做的事情是在读入时提供模式。但是,模式会随着文件的不同而变化,这取决于许多不重要的因素。所有文件中大约有100个“核心”列,这些是我唯一想要的


是否可以使用pyspark编写一个只将我想要的特定字段读取到spark中的部分模式?

首先,建议使用一个jsonl文件,其中每个文件都包含一个json输入数据。通常,您可以从一个大json中读取一组特定的字段,但这不应该被认为是Sparks的工作。您应该有一个初始方法,将json输入转换为可序列化数据类型的对象;你应该把那个物体送入你的火花管道


传递模式不是一个合适的设计,它只是使问题更加严重。相反,在从文件加载数据后,定义单个方法并提取特定字段。您可以使用以下链接查找如何从python中的json字符串中提取一些字段:

我告诉spark在使用
withColumn
读入后要提取哪些字段。问题是,可能有100000多个json文件,执行
df=spark.read.json('path/to/data')
需要很长时间。是的,您可以提供部分架构。例如,请看这个答案:谢谢你的回复@AlexOtt,但这个例子并不能满足我的需要。在本例中,已经读入了它们的数据帧。我需要
df=spark.read.json('file\u name',schema=partial\u schema)
。结果数据帧应仅具有部分架构。该架构也可以工作。。。