赏金6天后到期。回答此问题可获得+50声望奖励。datajack想引起更多的注意**这个问题。
我使用spark tensorflow连接器包编写了一个tfrecord数据集。
尝试将中的tfrecord文件作为中的tfrecorddataset读取时,将丢失包含数组数组的所有字段(在我的示例中,这是“cold”)。
重新创建的步骤
进行Spark会话,包括Spark张流连接器
创建包含嵌套数组列的示例数据框。
from pyspark.sql.types import *
data = [("A", 1, [1.1,2.0,3.0], [[0.0,1.0],[1.0,0.0]]),
("B", 2, [11.0,12.3,13.0], [[0.0,1.0],[1.0,0.0]]),
("C", 3, [21.0,22.0,23.5], [[1.0,0.0],[1.0,0.0]]),
]
schema = StructType([ \
StructField("colA",StringType(),True), \
StructField("colb",IntegerType(),True), \
StructField("colc",ArrayType(FloatType()),True), \
StructField("cold",ArrayType(ArrayType(FloatType())),True), \
])
df = spark.createDataFrame(data=data,schema=schema)
将df作为tfrecord写入磁盘。
write_path = "/home/ec2-user/SageMaker/testwrite/test.tfrecord"
df.write.format("tfrecords").option("recordType", "SequenceExample").mode("overwrite").save(write_path)
尝试使用tf.data.tfrecorddataset读入
import tensorflow as tf
import os
files = [f"{write_path}/{x}" for x in os.listdir(write_path) if x.startswith("part")]
dataset = tf.data.TFRecordDataset(files)
for i in dataset.take(1):
print(repr(i))
example = tf.train.Example()
example.ParseFromString(i.numpy())
print(example)
即使 print(repr(i))
显示numpy bytestring中存在“cold”。
<tf.Tensor: id=55, shape=(), dtype=string, numpy=b'\n8\n\r\n\x04colA\x12\x05\n\x03\n\x01C\n\r\n\x04colb\x12\x05\x1a\x03\n\x01\x03\n\x18\n\x04colc\x12\x10\x12\x0e\n\x0c\x00\x00\xa8A\x00\x00\xb0A\x00\x00\xbcA\x12&\n$\n\x04cold\x12\x1c\n\x0c\x12\n\n\x08\x00\x00\x80?\x00\x00\x00\x00\n\x0c\x12\n\n\x08\x00\x00\x80?\x00\x00\x00\x00'>
``` `example.ParseFromString` 不分析数据:(
features {
feature {
key: "colA"
value {
bytes_list {
value: "C"
}
}
}
feature {
key: "colb"
value {
int64_list {
value: 3
}
}
}
feature {
key: "colc"
value {
float_list {
value: 21.0
value: 22.0
value: 23.5
}
}
}
}
我没有成功使用 `tf.io.parse_single_example` 任何一个。我可以将所有嵌套数组分解为各自的字段,但不希望这样,因为我只会在tensorflow中再次合并它们。
暂无答案!
目前还没有任何答案,快来回答吧!