Apache spark 如何使用pyspark中java代码的bytestring处理流式RDD输出
我有一个流式管道,其中嵌套的json格式数据被馈送到Cloud PubSub。然后使用Spark Streaming将数据提取为流Apache spark 如何使用pyspark中java代码的bytestring处理流式RDD输出,apache-spark,pyspark,apache-spark-2.0,Apache Spark,Pyspark,Apache Spark 2.0,我有一个流式管道,其中嵌套的json格式数据被馈送到Cloud PubSub。然后使用Spark Streaming将数据提取为流 当打印以检查模式时,流(rdd)数据给出\u损坏\u记录:String 上面的自定义接收器代码是用Java编写的。 然后使用Pyspark处理输出RDD id 打印rdd时,发现它的前缀为b'(字节字符串格式) 如何在pyspark中处理此rdd,其中记录可以保存为2行而不是1行 我尝试过的事情: 在进一步的调试中,我们发现从Pyspark调用java代码时更容易出
当打印以检查模式时,流(rdd)数据给出
\u损坏\u记录:String
上面的自定义接收器代码是用Java编写的。
然后使用Pyspark处理输出RDD id
打印rdd时,发现它的前缀为b'(字节字符串格式)
如何在pyspark中处理此rdd,其中记录可以保存为2行而不是1行
我尝试过的事情:
在进一步的调试中,我们发现从Pyspark调用java代码时更容易出现序列化问题。因此改变了问题的主题。我能够解决问题。我能够解决问题。1) 使用pyspark访问数据流后,使用flatMap(lambda x:x)将数据流rdd中的记录展平。2) 此外,由于json模式的输入源使用json.loads()解析有效的json字符串并将其转换为Python字典3)上次将此数据保存到BQ
(b'{"_id": {"_data": "abv1"}, "operationType": "insert", "clusterTime": {"$timestamp": {"t": 1622466457, "i": 393}}, "fullDocument": {"_id": "nhmm7779", "uid": "5FZ", "cb": {"key1": "jk8", "user_id": "jk-3"}, "cmp": {"c": "Organic"}, "ts": 1622466405939.0, "cd": {"$date": 1622466457352}, "d": "2021:5:31", "sg": {"key5": "hj", "key6": "TV Menu", "key7": "NA"}, "s": 0, "dur": 0}, "ns": {"db": "database", "coll": "abnv55666"}, "documentKey": {"_id": "nhmm7779"}}',
b'{"_id": {"_data": "bhg4"}, "operationType": "insert", "clusterTime": {"$timestamp": {"t": 1622466480, "i": 542}}, "fullDocument": {"_id": "nm1", "uid": "qS", "cb": {"key1": "jku", "user_id": "ty6"}, "cmp": {"c": "Organic"}, "ts": 1622466434999.0, "cd": {"$date": 1622466480445}, "d": "2021:5:31", "sg": {"key5": "bn", "key6": 0, "key7": "val2"}, "s": 0, "dur": 0}, "ns": {"db": "database", "coll": "bvgh678"}, "documentKey": {"_id": "nm1"}}')