Exception(“ storageLevel必须是pyspark.StorageLevel类型”)

时间:2019-12-02 15:49:57

标签: pyspark flume

嗨,我正在尝试通过pyspark集成来创建水槽,但出现错误。

enter image description here

这是代码

from pyspark import SparkConf,SparkContext
from pyspark.streaming import StreamingContext
from pyspark.streaming.flume import FlumeUtils
import sys
from operator import add
from pyspark.sql import functions
hostname= sys.argv[1]
port= sys.argv[2]
renga = SparkConf().setMaster("yarn-client").setAppName("karthik")
amma= SparkContext(conf=renga)
appa=StreamingContext(amma,30)
rajagopal= FlumeUtils.createPollingStream(appa,hostname,port)
rajagopal.persist(StorageLevel.MEMORY_ONLY)
mohan= rajagopal.map(lambda m:m[1])
kowsi= mohan.flatMap(lambda fm : fm.split(" ")[6] == "deparment")
ujesh= kowsi.map(lambda m : (m.split(" ")[6].split("/")[1],1))
balaji=ujesh.reduceByKey(add)

balaji.saveAsTextFiles("xxxxx/user/shashankbh/jarvis/data/flume/conf")

appa.start()
appa.awaitTermination()

预先感谢

关于, Renganathan

1 个答案:

答案 0 :(得分:0)

FlumeUtils.createPollingStream的功能签名为

FlumeUtils.createPollingStream(
  ssc,
  addresses,
  storageLevel=StorageLevel(True, True, False, False, 2), 
  maxBatchSize=1000, 
  parallelism=5,
  bodyDecoder=<function utf8_decoder at 0x7efe1daea488>)

这意味着第三个位置参数是存储级别。在代码中,您传递了port,这是从sys.argv[2]获得的字符串,因此不是有效的存储级别。

这就是stacktrace的意思。对于任何程序员来说,学习如何理解堆栈跟踪都是一项很好的技能。