繁体   English   中英

pyspark dataframe 拆分动态列

[英]pyspark dataframe split dynamic columns

(我不是 python 开发人员)

我们有一个由外部方开发的库,可以重新计算温度测量中的误差。 这工作正常,但现在我们注意到我们的 2 种传感器类型产生不同的日志文件(欧洲和澳大利亚之间的差异)。

最重要的是,我们希望在将 dataframe 传递给库之前对其进行转换。 我能够跳过第一行,这不应该用作 header 与此代码

data21 = spark.read.option("header",False).format("csv").load("abfss://oper-iot-uploads@eurdtadcoglb907.dfs.core.windows.net/belgium/dessel/c3/kiln/temp/Auto202012101237.TXT")
header2 = data21.first()[0]
data2 = data21.filter(~col("_c0").contains(header2))

这会产生一个只有 _c0 列的好文件,但欧洲版本有一个逗号作为分隔符,澳大利亚有一个分号。 因此,欧洲版本的列从 _c0 到 _c980(或更少,取决于型号)。

我正在寻找一种将这个data2拆分为多个列的方法,找到了几个带有.split的解决方案,其中大部分是硬编码的,从pos 1-5 = field1,6-xx = field2。

我想找到一条完整的指令并创建最多 _cXXX,其中 XXX 是在该行中找到的列数......

有什么建议么

这是这样一个 _c0 行的示例。

136; 136; 136; 126; 126; 124; 124; 118; 118; 113; 113; 113; 112; 112; 118; 118; 132; 132; 150; 150; 167; 167; 167; 174; 174; 173; 173; 173; 173; 176; 176; 183; 183; 183; 194; 194; 207; 207; 221; 221; 233; 233; 242; 242; 249; 249; 253; 253; 258; 258; 258; 261; 261; 265; 265; 270; 270; 275; 275; 279; 279; 284; 284; 287; 287; 290; 290; 291; 291; 293; 293; 295; 295; 297; 297; 299; 299; 302; 302; 304; 304; 305; 305; 306; 306; 308; 308; 310; 310; 312; 312; 314; 314; 315; 315; 318; 318; 320; 320; 322; 322; 325; 325; 327; 327; 329; 329; 330; 330; 331; 331; 333; 333; 334; 336; 336; 338; 338; 339; 339; 341; 341; 344; 344; 347; 347; 350; 350; 351; 350; 350; 347; 347; 342; 342; 328; 328; 299; 299; 262; 235; 235; 223; 223; 219; 219; 216; 216; 215; 220; 220; 225; 225; 232; 232; 240; 240; 256; 273; 273; 284; 284; 292; 292; 307; 327; 327; 340; 340; 344; 344; 344; 343; 343; 341; 341; 338; 333; 333; 328; 328; 323; 317; 317; 309; 309; 300; 300; 291; 282; 282; 274; 274; 265; 257; 257; 250; 250; 244; 238;...

split应该这样做

from pyspark.sql import functions as F

data2.select(F.split('_c0', '; ').alias('_c0'))

如果列号不一致,则获取长度并迭代最大长度

col_sizes = data2.select(F.size('_c0').alias('_c0'))
col_max = col_sizes.agg(F.max('_c0'))
columns = col_max.collect()[0][0]

data2.select(*[data2['_c0'][i] for i in range(columns)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM