मैं Babel और PySpark का उपयोग करके एक float को currency में बदलना चाहता हूं

नमूना डेटा:

amount       currency
2129.9       RON
1700         EUR
1268         GBP
741.2        USD
142.08091153 EUR
4.7E7        USD
0            GBP

मैंने कोशिश की:

df = df.withColumn(F.col('amount'), format_currency(F.col('amount'), F.col('currency'),locale='be_BE'))

या

df = df.withColumn(F.col('amount'), format_currency(F.col('amount'), 'EUR',locale='be_BE'))

वे दोनों मुझे एक त्रुटि देते हैं:
यहां छवि विवरण दर्ज करें

0
John Doe 2 फरवरी 2021, 09:37

2 जवाब

सबसे बढ़िया उत्तर

स्पार्क डेटाफ्रेम के साथ पायथन पुस्तकालयों का उपयोग करने के लिए, आपको यूडीएफ का उपयोग करने की आवश्यकता है:

from babel.numbers import format_currency
import pyspark.sql.functions as F

format_currency_udf = F.udf(lambda a, c: format_currency(a, c))

df2 = df.withColumn(
    'amount',
    format_currency_udf('amount', 'currency')
)

df2.show()
+----------------+--------+
|          amount|currency|
+----------------+--------+
|     RON2,129.90|     RON|
|       €1,700.00|     EUR|
|       £1,268.00|     GBP|
|       US$741.20|     USD|
|         €142.08|     EUR|
|US$47,000,000.00|     USD|
+----------------+--------+
1
mck 2 फरवरी 2021, 11:08

आपके डेटाफ़्रेम के amount कॉलम को पूर्व-संसाधित करने में कोई समस्या प्रतीत होती है। त्रुटि से यह स्पष्ट है कि value स्ट्रिंग में कनवर्ट करने के बाद केवल संख्यात्मक नहीं है, जो कि इसके अनुसार होना चाहिए tableऔर इसमें कुछ अतिरिक्त वर्ण भी हैं। आप इसे खोजने के लिए इस कॉलम पर जांच कर सकते हैं और इसे ठीक करने के लिए अनावश्यक वर्ण हटा सकते हैं। उदाहरण के रूप में:

>>> import decimal
>>> value = '10.0'
>>> value = decimal.Decimal(str(value))
>>> value
Decimal('10.0')
>>> value = '10.0e'
>>> value = decimal.Decimal(str(value))
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    value = decimal.Decimal(str(value))
decimal.InvalidOperation: [<class 'decimal.ConversionSyntax'>]   # as '10.0e' is not just numeric
1
think-maths 2 फरवरी 2021, 10:19