有没有什么好的方法可以将Spark RDD的内容读入Dask结构
Is there any good way to read the content of a Spark RDD into a Dask structure
目前Spark结构与Dask的集成在处理复杂的嵌套结构时显得比较笨重。专门转储具有嵌套结构的 Spark Dataframe 以供 Dask 读取似乎不是很可靠,尽管 parquet 加载是正在进行的大量工作的一部分(fastparquet,pyarrow);
所以我的后续问题 - 假设我可以忍受在 Spark 中进行一些转换并将 DataFrame 转换为包含自定义 class 对象的 RDD;有没有办法可靠地转储带有自定义 class 对象的 Spark RDD 的数据并在 Dask 集合中读取它?显然,您可以将 rdd 收集到 python 列表中,对其进行 pickle,然后将其作为普通数据结构读取,但这消除了加载大于内存数据集的机会。 dask 可以使用类似 spark pickling 的东西来加载分布式 pickle 吗?
我通过执行以下操作解决了这个问题
我创建了一个带有自定义对象列表作为行值的 Spark RDD,我创建了一个版本的 rdd,其中我使用 cPickle.dumps
将对象序列化为字符串。然后将这个 RDD 转换为一个简单的带有字符串列的 DF,并将其写入 parquet。 Dask
能够读取结构简单的镶木地板文件。然后用cPickle.loads
反序列化得到原始对象
目前Spark结构与Dask的集成在处理复杂的嵌套结构时显得比较笨重。专门转储具有嵌套结构的 Spark Dataframe 以供 Dask 读取似乎不是很可靠,尽管 parquet 加载是正在进行的大量工作的一部分(fastparquet,pyarrow);
所以我的后续问题 - 假设我可以忍受在 Spark 中进行一些转换并将 DataFrame 转换为包含自定义 class 对象的 RDD;有没有办法可靠地转储带有自定义 class 对象的 Spark RDD 的数据并在 Dask 集合中读取它?显然,您可以将 rdd 收集到 python 列表中,对其进行 pickle,然后将其作为普通数据结构读取,但这消除了加载大于内存数据集的机会。 dask 可以使用类似 spark pickling 的东西来加载分布式 pickle 吗?
我通过执行以下操作解决了这个问题
我创建了一个带有自定义对象列表作为行值的 Spark RDD,我创建了一个版本的 rdd,其中我使用 cPickle.dumps
将对象序列化为字符串。然后将这个 RDD 转换为一个简单的带有字符串列的 DF,并将其写入 parquet。 Dask
能够读取结构简单的镶木地板文件。然后用cPickle.loads
反序列化得到原始对象