作为新手,我创建了一个具有几个转换函数的管道,在从文件中输入之后,它会将代码转换为小写。当我将这个结果传递到下一个阶段时,它不是一个字符串,而是多个字符。下面是我的代码:
import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions
class ToLower(beam.DoFn):
def process(self, element):
#return [{'Data': element.lower()}]
return element.lower()
class ToReverse(beam.DoFn):
def process(self, element):
print(element)
return element
if __name__ == '__main__':
in_file = 'news.txt'
options = PipelineOptions()
with beam.Pipeline(options=PipelineOptions()) as p:
r = (
p | beam.io.ReadFromText(in_file)
| beam.ParDo(ToLower())
| beam.ParDo(ToReverse())
)假设news.txt的内容如下:
巴基斯坦的
冠状病毒病例在一天内翻了一番,周一的总数为106例。
当我运行上面的代码时,它会打印以下内容,而不是相反:
c
o
r
o
n
a
v
i
r
u
s
c
a
s
e
s
i
n
p
a
k
i
s
t
a
n
d
o
u
b
l
e
d
i
n
o
n
e
d
a
y
w
i
t
h
t
o
t
a
l
t
a
l
l
y
a
t
1
0
6
o
n
m
o
n
d
a
y当我将ToLower中的返回更改为return [{'Data': element.lower()}]时,它将返回为一个字符串行。这里发生什么事情?
发布于 2022-08-11 11:37:22
基于Apache文档(https://beam.apache.org/documentation/transforms/python/elementwise/pardo/):

这意味着梁框架查看输出元素,并尝试将输出元素转换为零或多个元素。
Python字符串是Unicode代码点的序列。因此,即使lower()函数返回一个元素,该元素也会由Beam框架转换为元素序列。
希望这能澄清。
很少有其他相关的文章:
Difference between beam.ParDo and beam.Map in the output type?
https://stackoverflow.com/questions/60710892
复制相似问题