我正在通过Azure教程研究如何通过eventhub将推文流传输到Databricks中,并通过认知服务进行情感分析(link to that)。很好,但是我想对推文的位置进行一些分析。本教程仅将tweet的文本(我相信)发送到eventhub。注意下面的Scala代码中的status.getText()。
while (!finished) {
val result = twitter.search(query)
val statuses = result.getTweets()
var lowestStatusId = Long.MaxValue
for (status <- statuses.asScala) {
if(!status.isRetweet()){
sendEvent(status.getText(), 5000)
}
lowestStatusId = Math.min(status.getId(), lowestStatusId)
}
query.setMaxId(lowestStatusId - 1)
}
sendEvent在这里:
def sendEvent(message: String, delay: Long) = {
sleep(delay)
val messageData = EventData.create(message.getBytes("UTF-8"))
eventHubClient.get().send(messageData)
System.out.println("Sent event: " + message + "\n")
}
我还可以调用geoLocation()并将其发送到eventhub,以便稍后可以从eventhub中提取给定推文的geoLocation和/或文本吗?
主要是想知道EventData.create()是否可以为同一“行”(单个事件)发送两个“列”(属性)。
EventData对象仅传输二进制数据。您在其中放置的内容完全取决于您。人们通常会创建一个JSON结构,该结构将另存为字符串,然后转换为字节。所以代替
sendEvent(status.getText(), 5000)
您可以做类似(伪代码的位)
sendEvent('{"text": "' + status.getText() + '", "location":"' + yourLocation + '"}', 5000)
EventData对象支持应用程序属性包,根据您的应用程序和业务逻辑,您可以填充小数据以在接收方进行快速查找。
var eventData = new EventData(Encoding.UTF8.GetBytes("Hello EventHub!"));
eventData.Properties["ContosoEventType"] = "some value here";