在我的应用程序中,我想丰富无限的事件流。流本身通过对 Id 进行散列来并行化。对于每个事件,可能会调用外部源(例如 REST、DB)。这个调用本质上是阻塞的。必须保持一个流分区内的事件顺序。
我的想法是创建一个 RichMapFunction,它设置连接,然后轮询每个事件的外部源。阻塞调用通常不需要很长时间,但在最坏的情况下,服务可能会关闭。
理论上,这是可行的,但我觉得这样做不太好,因为我不知道如果流中有一些阻塞操作,Flink 会如何反应。如果您有很多并行流阻塞会发生什么,即我的线程用完了吗?或者在流并行化的点上行为如何向上流?
其他人是否可能有类似的问题以及我的问题的答案或一些解决方法的想法?
我有一个由文件夹和文件构成的数据集.文件夹/文件结构本身对于数据分析很重要.
数据集的结构:
folder1
+-----file11
+-----column1
+-----column2
Run Code Online (Sandbox Code Playgroud)
每个文件都包含描述一个对象的数据.文件格式一致.它基本上是一个有两列的csv文件.这两列应该表示为结果对象中的元组序列.
文件的大小非常小.最高不超过20 kb.每个文件夹包含大约200个文件.
所需的输出对象应为:
{
a: "folder1", // name of parent folder
b: "file11", // name of content file
c: Seq[(String, String)] // content of file1
}
Run Code Online (Sandbox Code Playgroud)
如何处理Scala中此数据集的读取?
在Apache Flink中,如果我在一个主键上连接两个数据集,我会得到一个元组2,其中包含每个数据集的相应数据集条目.
问题是,当将该map()方法应用于输出的元组2数据集时,它看起来并不好看,特别是如果两个数据集的条目具有大量特征.
在两个输入数据集中使用元组得到一些像这样的代码:
var in1: DataSet[(Int, Int, Int, Int, Int)] = /* */
var in2: DataSet[(Int, Int, Int, Int)] = /* */
val out = in1.join(in2).where(0, 1, 2).equalTo(0, 1, 2)
.map(join => (join._1._1, join._1._2, join._1._3,
join._1._4, join._1._5, join._2._4))
Run Code Online (Sandbox Code Playgroud)
我不介意使用POJO或案例类,但我不知道这会如何使它变得更好.
问题1:有没有一种很好的方法来展现元组2?例如使用其他运营商.
问题2:如何在同一个键上处理3个数据集的连接?这将使示例源更加混乱.
谢谢你的帮助.