我有这个问题:
我正在使用结构化流从Kafka读取数据,数据是CSV行。当我从Kafka获得数据时,我有了一个流数据帧,其中CSV行位于“值”内,并且是字节序列。
sDF2 = sDF.selectExpr("CAST(value as string)").select( split("value",","))
使用它,我有了一个新的数据框,其中“值”是一个字符串,它是CSV行。
如何获取已解析并将CSV字段拆分为数据框列的新数据框?
示例: csv行是“ abcd,123,frgh,1321”
sDF schema, which contains the data downloaded from Kafka, is
key, value, topic, timestamp etc... and here value is a byte sequence with no type
sDF2.schema has only a column ( named value of type string )
我喜欢新的数据框是
sDF3.col1 = abcd
sDF3.col2 = 123
sDF3.col3 = frgh ...etc
所有列均为字符串。
我仍然可以这样做:
sDF3 = sDF2.select( sDF2.csv[0].alias("EventId").cast("string"),
sDF2.csv[1].alias("DOEntitlementId").cast("string"),
sDF2.csv[3].alias("AmazonSubscriptionId").cast("string"),
sDF2.csv[4].alias("AmazonPlanId").cast("string"),
... etc ...
但是看起来很丑。
答案 0 :(得分:0)
我还没有尝试过,但是类似的东西应该可以工作。
sDF2 =
sDF.selectExpr("CAST(value as string)")
.alias("csv").select("csv.*")
.select("split(value,',')[0] as DOEntitlementId",
"split(value,',')[1] as AmazonSubscriptionId",
"split(value,',')[2] as AmazonPlanId")