我使用Pyspark上的以下代码从bigquery导入数据:
table_data = sc.newAPIHadoopRDD(
'com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat',
'org.apache.hadoop.io.LongWritable',
'com.google.gson.JsonObject',
conf=conf)
输出是RDD框架,但是具有json格式的数据:
[(0, u'{"colA":"Value1,Value4"}'), (52, u'{"colA":"Value2"}')]
我需要以RDD格式提取所有值。产生RDD的一个主要问题不应该包含每条记录的双引号。
必需:
Value1,Value4
Value2
而不是:
"Value1,Value4"
"Value2"
答案 0 :(得分:1)
可以使用json
模块加载它:
import json
table_data.map(lambda t: json.loads(t[1]).get("colA")).collect()
# [u'Value1,Value4', u'Value2']
答案 1 :(得分:1)
根据我从你的问题中所理解的,这就是你在寻找的东西:
import json
data = sc.parallelize([(0, u'{"colA":"Value1,Value4"}'), (52, u'{"colA":"Value2"}')])
data = data.map(lambda x: (json.loads(x[1])['colA']))
print(data.collect())
结果:
['Value1,Value4', 'Value2']