我的csv文件包含两列
示例Csv数据与记事本中的类似 单元格B2包含json密钥对作为字符串。在
id,cbgs
sg:bd1f26e681264baaa4b44083891c886a,"{""060372623011"":166,""060372655203"":70,""060377019021"":34}" sg:04c7f777f01c4c75bbd9e43180ce811f,"{""060372073012"":7}"
现在尝试转换如下
id,cbgs,value
sg:bd1f26e681264baaa4b44083891c886a,060372623011,166
sg:bd1f26e681264baaa4b44083891c886a,060372655203,70
sg:bd1f26e681264baaa4b44083891c886a,060377019021,34
sg:04c7f777f01c4c75bbd9e43180ce811f,060372073012,7
我试过的
1.尝试1
^{pr2}$Error msg:
cannot resolve '
item
' given input columns: [id, cbgs, recom_item, recom_cnt];;
根据DrChess的建议,我尝试了下面的代码,但得到了空列表作为输出。在
fifa_df.withColumn("cbgs", F.from_json("cbgs", T.MapType(T.StringType(), T.IntegerType()))).select("id", F.explode(["visitor_home_cbgs"]).alias('cbgs', 'value')).show()
+------------------+----+-----+
|safegraph_place_id|cbgs|value|
+------------------+----+-----+
+------------------+----+-----+
首先需要将json解析为
Map<String, Integer>
,然后分解映射。你可以这样做:以下是我所遵循的。这只涉及字符串处理操作,而不涉及复杂的数据类型处理。在
escape
选项读取源csv文件"
df=spark.read.format('csv').option('header','True').option('escape','"')
- 第二列作为字符串而不是映射加载。现在
^{pr2}$split
列df=df.withColumn('cbgs',split(df['cbgs'],','))
3.稍后,爆炸。在
df=df.withColumn('cbgs',explode(df['cbgs']))
regex
从cbgs列中提取值 ^{cd8}相关问题 更多 >
编程相关推荐