我想根据特定条件从大型 DataFrame 生成分层 TFrecord 文件,为此我使用write.partitionBy(). 我也在 SPARK 中使用tensorflow-connector,但这显然不能与write.partitionBy()操作一起使用。因此,除了尝试分两步工作之外,我还没有找到其他方法:
partitionBy()生成的分区并将其写入镶木地板文件。这是我无法有效完成的第二步。我的想法是读取执行器上的各个 parquet 文件并立即将它们写入 TFrecord 文件。但这需要访问 SQLContext,这只能在驱动程序中完成(此处讨论),因此不能并行。我想做这样的事情:
# List all parquet files to be converted
import glob, os
files = glob.glob('/path/*.parquet'))
sc = SparkSession.builder.getOrCreate()
sc.parallelize(files, 2).foreach(lambda parquetFile: convert_parquet_to_tfrecord(parquetFile))
Run Code Online (Sandbox Code Playgroud)
convert_parquet_to_tfrecord我可以构造能够在执行器上执行此操作的函数吗?
我还尝试在读取所有镶木地板文件时仅使用通配符:
SQLContext(sc).read.parquet('/path/*.parquet')
Run Code Online (Sandbox Code Playgroud)
这确实读取了所有镶木地板文件,但不幸的是不是读取到单独的分区中。看来原始结构丢失了,因此如果我想要将各个镶木地板文件的确切内容转换为 TFrecord 文件,这对我没有帮助。
还有其他建议吗?
我有一个大型3D HDF5数据集,它表示某个变量的位置(X,Y)和时间。接下来,我有一个二维numpy数组,其中包含相同(X,Y)位置的分类。我想要实现的是,我可以从3D HDF5数据集中提取属于2D数组中某个类的所有时间序列。
这是我的示例:
import numpy as np
import h5py
# Open the HDF5 dataset
NDVI_file = 'NDVI_values.hdf5'
f_NDVI = h5py.File(NDVI_file,'r')
NDVI_data = f_NDVI["NDVI"]
# See what's in the dataset
NDVI_data
<HDF5 dataset "NDVI": shape (1319, 2063, 53), type "<f4">
# Let's make a random 1319 x 2063 classification containing class numbers 0-4
classification = np.random.randint(5, size=(1319, 2063))
Run Code Online (Sandbox Code Playgroud)
现在我们有了3D HDF5数据集和2D分类。让我们查找属于类号“ 3”的像素
# Look for the X,Y locations that have class number '3'
idx = np.where(classification == 3)
Run Code Online (Sandbox Code Playgroud)
这将返回一个大小为2的元组,其中包含与条件匹配的X,Y对,在我的随机示例中,对的数量为544433。我现在应该如何使用此idx变量创建大小为2D的数组(544433,53 …
由于我最近开始了一个新项目,因此我陷入了“在编写代码之前先思考”阶段。我一直在做基本的编码,但我真的认为我现在需要仔细计划我应该如何组织我的脚本产生的结果。
它本质上非常简单:我有一堆从 Google Earth Engine 中提取的卫星数据,包括不同的传感器、不同的采集模式等。我想做的是遍历“sensor-acquisition_mode”对的列表,请求数据,做一些更多的处理,最后将它保存到一个变量或文件中。
假设我有以下示例:
sensors = ['landsat','sentinel1']
sentinel_modes = ['ASCENDING','DESCENDING']
sentinel_polarization = ['VV','VH']
Run Code Online (Sandbox Code Playgroud)
最后,我想要某种嵌套数据结构,在最高级别具有元素“landsat”和“sentinel1”;在“landsat”下,我会有一个时间和价值矩阵;在“哨兵1”下,我将拥有不同的模式,然后还有数据矩阵。
我一直在考虑列表、字典或带有属性的类,但我真的拿不定主意,因为我也没有那么多经验。在这个阶段,在正确方向上的一点帮助将不胜感激!