我正在尝试(失败)在Apache Flink中运行一个简单的hello world类型程序。代码接收来自Apache Kafka的消息添加了一个"。"在每个字母后面并将新字符串打印到stdout。代码正确地从Kafka获取消息,但map函数添加"。"失败。我在REPL提示符下尝试了该函数,scala代码在那里正常工作。 Scala代码:
DECLARE @T TABLE (
[Date] DATE,
[Value] DECIMAL(9,2)
)
INSERT @T VALUES
( '08-01-2016', 1 ),
( '08-02-2016', 1 ),
( '08-03-2016', 1 ),
( '08-04-2016', 1 ),
( '08-05-2016', 1 ),
( '08-06-2016', 2 ),
( '08-07-2016', 2 ),
( '08-08-2016', 2 ),
( '08-09-2016', 2.5 ),
( '08-10-2016', 1 ),
( '08-11-2016', 1 )
SELECT * FROM @T
SELECT A.[Date] StartDate, B.[Date] EndDate, A.[Value] FROM (
SELECT A.*, ROW_NUMBER() OVER (ORDER BY A.[Date], A.[Value]) O FROM @T A
LEFT JOIN @T B ON B.[Value] = A.[Value] AND B.[Date] = DATEADD(d, -1, A.[Date])
WHERE B.[Date] IS NULL
) A
JOIN (
SELECT A.*, ROW_NUMBER() OVER (ORDER BY A.[Date], A.[Value]) O FROM @T A
LEFT JOIN @T B ON B.[Value] = A.[Value] AND B.[Date] = DATEADD(d, 1, A.[Date])
WHERE B.[Date] IS NULL
) B ON B.O = A.O
flink程序: flink code 切断行读
scala> input = "hello"
input: String = hello
scala> val output = input.flatMap(value => value + ".")
output: String = h.e.l.l.o
我无法弄清楚我哪里出错了,我已经尝试过apache文档无济于事。你能给我的任何帮助都会受到好评。
答案 0 :(得分:0)
首先,我建议学习一些关于函数编程和map / flatMap / reduce等操作的基础知识。
所有这些提到的功能都适用于集合。在您的scala示例中,@pedrofuria指出您将flatMap
函数应用于String
,这是char
s的集合
在flink示例中,messageStream
可以被抽象为字符串的集合,所以要执行你所描述的操作,你应该这样做:
val stream = messageStream.map(str => str.mkString("."))
我在你的例子中使用了mkString
代替flatMap
因为前者而不是
h.e.l.l.o(如你所写)
它产生
h.e.l.l.o。
但是,再一次真正从函数式编程的基础开始。
答案 1 :(得分:0)
感谢您的帮助,我想出了问题。 虽然flatMap函数在scala提示符下工作,但它在Flink中不起作用,因为Flink要求FlatMap传递带有覆盖的新FlatMapFunction。仍然不确定为什么它在flink中的scala提示符下工作,但代码现在编译并按预期运行。
答案 2 :(得分:0)
因为scala提示符中的flatMap与flink程序中的flatMap不同。
scala提示符中的flatMap只是scala中的一个函数。
flink flatMap可以应用,输入如下:
val input = benv.fromElements(
"To be, or not to be,--that is the question:--",
"Whether 'tis nobler in the mind to suffer",
"The slings and arrows of outrageous fortune",
"Or to take arms against a sea of troubles,")
val counts = input
.flatMap { _.toLowerCase.split("\\W+") }
.map { (_, 1) }.groupBy(0).sum(1)
请参阅:scala-shell