python - कैसे एक टाइपफ़ॉर्म कॉलम को स्ट्रिंग टाइप से डबल टाइप में pyspark में बदलें




apache-spark dataframe (3)

दिए गए जवाब समस्या से निपटने के लिए पर्याप्त हैं, लेकिन मैं एक और तरीका साझा करना चाहता हूं जिसे स्पार्क के नए संस्करण के साथ पेश किया जा सकता है (मुझे इसके बारे में यकीन नहीं है) इसलिए दिए गए जवाब ने इसे नहीं पकड़ा।

हम col("colum_name") स्पार्क स्टेटमेंट में col("colum_name") कीवर्ड के साथ पहुँच सकते हैं:

from pyspark.sql.functions import col , column
changedTypedf = joindf.withColumn("show", col("show").cast("double"))

मेरे पास स्ट्रिंग के रूप में कॉलम के साथ एक डेटाफ्रेम है। मैं स्तंभ प्रकार को पाइस्पार्क में डबल प्रकार में बदलना चाहता था।

निम्नलिखित तरीका है, मैंने किया:

toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))

बस जानना चाहता था, क्या यह सही तरीका है कि लॉजिस्टिक रिग्रेशन से गुजरते समय, मुझे कुछ त्रुटि हो रही है, इसलिए मुझे आश्चर्य है, क्या यही परेशानी का कारण है।


यहां यूडीएफ की जरूरत नहीं है। Column पहले से ही DataType उदाहरण के साथ cast विधि प्रदान करता है:

from pyspark.sql.types import DoubleType

changedTypedf = joindf.withColumn("label", joindf["show"].cast(DoubleType()))

या छोटी स्ट्रिंग:

changedTypedf = joindf.withColumn("label", joindf["show"].cast("double"))

जहां कैनोनिकल स्ट्रिंग नाम (अन्य विविधताओं के रूप में अच्छी तरह से समर्थित हो सकते हैं) simpleString मूल्य के अनुरूप हैं। इसलिए परमाणु प्रकारों के लिए:

from pyspark.sql import types 

for t in ['BinaryType', 'BooleanType', 'ByteType', 'DateType', 
          'DecimalType', 'DoubleType', 'FloatType', 'IntegerType', 
           'LongType', 'ShortType', 'StringType', 'TimestampType']:
    print(f"{t}: {getattr(types, t)().simpleString()}")
BinaryType: binary
BooleanType: boolean
ByteType: tinyint
DateType: date
DecimalType: decimal(10,0)
DoubleType: double
FloatType: float
IntegerType: int
LongType: bigint
ShortType: smallint
StringType: string
TimestampType: timestamp

और उदाहरण के लिए जटिल प्रकार

types.ArrayType(types.IntegerType()).simpleString()   
'array<int>'
types.MapType(types.StringType(), types.IntegerType()).simpleString()
'map<string,int>'

स्तंभ का नाम सुरक्षित रखें और इनपुट स्तंभ के समान नाम का उपयोग करके अतिरिक्त स्तंभ जोड़ से बचें:

changedTypedf = joindf.withColumn("show", joindf["show"].cast(DoubleType()))




apache-spark-sql