我使用spark 1.3来使用.jsonRDD读取JSON流。但是,当我在2.1中使用它时它不起作用,因为它已被弃用。更新的版本是read.json()。但是read.json似乎不起作用并且给我一个错误
u"cannot resolve '`availableDocks`' given input columns: [];
代码如下:
ssc = StreamingContext(sc, 60)
streams=ssc.textFileStream('s3://realtime-nyc-bike')
def getSparkSessionInstance(sparkConf):
if ("sparkSessionSingletonInstance" not in globals()):
globals()["sparkSessionSingletonInstance"] = SparkSession \
.builder \
.config(conf=sparkConf) \
.getOrCreate()
return globals()["sparkSessionSingletonInstance"]
def process(time, rdd):
print("========= %s =========" % str(time))
try:
# Get the singleton instance of SparkSession
spark = getSparkSessionInstance(rdd.context.getConf())
# Convert RDD[String] to RDD[Row] to DataFrame
df = spark.read.json(rdd)
# Creates a temporary view using the DataFrame
df.createOrReplaceTempView("station_data")
results=spark.sql("select stationName from station_data where availableDocks > 20")
results.show()
json是有效的格式并经过验证。有没有办法为json指定列。这在使用jsonRDD的1.3上工作正常。 json数据可以从https://feeds.citibikenyc.com/stations/stations.json获得,其中我只使用了stationBeanList。