स्पार्क के डेटाफ्रेम के कॉलम में मौजूद अल्फ़ान्यूमेरिक मानों से वर्णमाला को निकालना

Aug 18 2020

डेटाफ्रेम के दो स्तंभ दिखते हैं।

SKU   | COMPSKU

PT25M | PT10M
PT3H  | PT20M
TH    | QR12
S18M  | JH

पपड़ी के साथ चिंगारी

मैं सभी वर्णमाला कैसे निकाल सकता हूं और केवल संख्या बरकरार है

अपेक्षित उत्पादन:

25|10
3|20
0|12
18|0

जवाब

Shu Aug 18 2020 at 20:40

regexp_replaceफ़ंक्शन के साथ प्रयास करें, फिर रिक्त मान को 0 से बदलने के लिए केस when otherwise statemeएनटी का उपयोग करें ।

Example:

df.show()
/*
+-----+-------+
|  SKU|COMPSKU|
+-----+-------+
|PT25M|  PT10M|
| PT3H|  PT20M|
|   TH|   QR12|
| S18M|     JH|
+-----+-------+
*/

df.withColumn("SKU",regexp_replace(col("SKU"),"[a-zA-Z]","")).
withColumn("COMPSKU",regexp_replace(col("COMPSKU"),"[a-zA-Z]","")).
withColumn("SKU",when(length(trim(col("SKU")))===0,lit(0)).otherwise(col("SKU"))).
withColumn("COMPSKU",when(length(trim(col("COMPSKU")))===0,lit(0)).otherwise(col("COMPSKU"))).
show()

/*
+---+-------+
|SKU|COMPSKU|
+---+-------+
| 25|     10|
|  3|     20|
|  0|     12|
| 18|      0|
+---+-------+
*/
1 jayrythium Aug 18 2020 at 21:15

आप इसे इस तरह से भी कर सकते हैं।

df.withColumn(
    "SKU",
    when(regexp_replace(col("SKU"),"[a-zA-Z]","")==="",0
        ).otherwise(regexp_replace(col("SKU"),"[a-zA-Z]","")) 
).withColumn(
    "COMPSKU",
    when(regexp_replace(col("COMPSKU"),"[a-zA-Z]","")==="", 0
        ).otherwise(regexp_replace(col("COMPSKU"),"[a-zA-Z]",""))
).show()
/*
        +-----+-------+
        |  SKU|COMPSKU|
        +-----+-------+
        |  25 |  10   |
        |   3 |  20   |
        |   0 |  12   |
        |  18 |   0   |
        +-----+-------+
*/