Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark PySpark foreachPartition并行写入数据库_Apache Spark_Pyspark - Fatal编程技术网

Apache spark PySpark foreachPartition并行写入数据库

Apache spark PySpark foreachPartition并行写入数据库,apache-spark,pyspark,Apache Spark,Pyspark,我将数百个XML文件读入一个Spark数据框,其中每一行都包含特定事件的元数据和时间序列数据。这些行中的每一行都被转换成rdd,并被转换成具有特定键/值结构的成批文档,然后写入数据库。XML数据需要分成批df.rdd.coalesce(20)。foreachPartition(进程分区)将顺序条目写入数据库。此外,函数进程的逻辑分区也将是连续的 您需要对def进程分区的逻辑进行多线程处理。这将加快这一进程。还可以使用df.rdd.coalesce(20).foreachPartitionAsyn

我将数百个XML文件读入一个Spark数据框,其中每一行都包含特定事件的元数据和时间序列数据。这些行中的每一行都被转换成rdd,并被转换成具有特定键/值结构的成批文档,然后写入数据库。XML数据需要分成批
df.rdd.coalesce(20)。foreachPartition(进程分区)
将顺序条目写入数据库。此外,函数进程的逻辑分区也将是连续的


您需要对def
进程分区的逻辑进行多线程处理。这将加快这一进程。还可以使用
df.rdd.coalesce(20).foreachPartitionAsync(进程分区)

虽然您在数据分发方面似乎有一些问题,但它更像是您使用的Python代码和/或服务的问题。每38MB存储73条记录21分钟看起来太长了。除非你提供更多的细节,否则可能很难帮助你。这在很多方面都是不正确的。1.foreachPartition可以同时在不同的工作进程上运行不同的分区。2.您应该尝试将分区中的行批量写入,以节省时间,为每个分区创建一个到DB的连接,并在分区结束时关闭它。
def build_documents(data):

    # Make dataframe out of data tags
    data = pd.DataFrame([i.split(',') for i in list(chain(*(data)))])

    # Helper function to Get Batches
    for batch in get_batches(data): 
          x = batch.T.to_dict()
          yield x

def process_partition(partition):
   client = document_client.DocumentClient(HOST, {'masterKey': MASTER_KEY} )
   for element in partition:
        generator = build_documents(element)
        for batch in generator:
            client.CreateDocument(collection_link + 'data', batch)


# Write to Database
df.rdd.coalesce(20).foreachPartition(process_partition)