使用spark

时间:2017-01-09 13:59:35

标签: scala apache-spark streaming spark-streaming apache-nifi

我正在使用Apache NiFi和Apache Spark为大学做一个小项目。我想用NiFi创建一个工作流程,从HDFS读取TSV文件并使用Spark Streaming我可以处理文件并在MySQL中存储我需要的信息。我已经在NiFi中创建了我的工作流程,并且存储部分已经在运行。问题是我无法解析NiFi包,所以我可以使用它们。

文件包含如下行:

linea1File1 TheReceptionist 653 Entertainment   424 13021   4.34    1305    744 DjdA-5oKYFQ NxTDlnOuybo c-8VuICzXtU

每个空格都是一个标签(“\ t”)

这是我在Spark中使用Scala的代码:

 val ssc = new StreamingContext(config, Seconds(10))
 val packet = ssc.receiverStream(new NiFiReceiver(conf, StorageLevel.MEMORY_ONLY))
 val file = packet.map(dataPacket => new String(dataPacket.getContent, StandardCharsets.UTF_8))

直到这里我可以在一个字符串中获取我的整个文件(7000多行)...不幸的是我不能在行中分割该字符串。我需要在行中获取整个文件,因此我可以在对象中解析它,在其上应用一些操作并存储我想要的内容

任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:3)

每个数据包将成为来自NiFi的一个流文件的内容,因此如果NiFi从具有大量行的HDFS中选取一个TSV文件,则所有这些行都将在一个数据包中。

很难说没有看到你的NiFi流,但你可能会使用行数为1的SplitText将你的TSV分成NiFi,然后才会产生火花流。