Apache spark 使用结构化流媒体将阵列扩展到spark中的列
我有一个问题: 我正在使用结构化流媒体从卡夫卡读取数据,数据是CSV行。当我从Kafka获取数据时,我有一个流数据帧,其中CSV行位于“value”内,它是一个字节序列Apache spark 使用结构化流媒体将阵列扩展到spark中的列,apache-spark,dataframe,apache-kafka,streaming,Apache Spark,Dataframe,Apache Kafka,Streaming,我有一个问题: 我正在使用结构化流媒体从卡夫卡读取数据,数据是CSV行。当我从Kafka获取数据时,我有一个流数据帧,其中CSV行位于“value”内,它是一个字节序列 sDF2 = sDF.selectExpr("CAST(value as string)").select( split("value",",")) 使用这个,我有了一个新的数据框,其中“value”是一个字符串,它是CSV行 我如何获得一个新的数据框,在这里我已经解析了CSV字段并将其拆分为数据框列 例如: csv行为“a
sDF2 = sDF.selectExpr("CAST(value as string)").select( split("value",","))
使用这个,我有了一个新的数据框,其中“value”是一个字符串,它是CSV行
我如何获得一个新的数据框,在这里我已经解析了CSV字段并将其拆分为数据框列
例如:
csv行为“abcd,123,frgh,1321”
我喜欢新的数据帧是
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 ...
但是它看起来很难看。我还没有试过,但是像这样的东西应该行得通
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")
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")