簡體   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