স্ট্রিং টাইপ থেকে পিএসপার্কে ডাবল প্রকারে কীভাবে ডেটাফ্রেম কলাম পরিবর্তন করবেন


102

আমার কাছে স্ট্রিং হিসাবে কলাম সহ একটি ডেটাফ্রেম রয়েছে। আমি কলামের প্রকারটি পাইসপার্কে ডাবল প্রকারে পরিবর্তন করতে চেয়েছিলাম।

নিম্নলিখিতটি উপায়, আমি করেছি:

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

কেবল জানতে চেয়েছিলেন, লজিস্টিক রিগ্রেশন চালানোর সময় এটি কি এটি করার সঠিক উপায়, আমি কিছুটা ত্রুটি পাচ্ছি, তাই আমি আশ্চর্য হলাম, এই কারণেই এই সমস্যার কারণ।

উত্তর:


181

এখানে কোনও ইউডিএফের দরকার নেই। Columnইতিমধ্যে উদাহরণ সহ castপদ্ধতি সরবরাহ করে :DataType

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>'

4
colফাংশন ব্যবহার করেও কাজ করে। from pyspark.sql.functions import col, changedTypedf = joindf.withColumn("label", col("show").cast(DoubleType()))
স্টাজা

কাস্ট () যুক্তি ("স্ট্রিং" সিনট্যাক্স) এর সম্ভাব্য মানগুলি কী কী?
বীরাওয়ান পূর্বন্তো

আমি বিশ্বাস করতে পারি না স্পষ্ট স্পর্ক ডকটি ডেটাটাইপের জন্য বৈধ স্ট্রিংয়ে ছিল। আমি যে নিকটতম রেফারেন্সটি দেখতে পেলাম তা হ'ল : ডকস.টিটিবকো / পব / সফায়ার- অ্যানালিস্ট / .7..1.১ / ডক / এইচটিএমএল / en- মার্কিন /…
বীরাওয়ান পূর্বন্তো

4
এক সাথে একাধিক কলাম কীভাবে রূপান্তর করবেন?
হুই চেন

আমি কীভাবে অযোগ্যকে মিথ্যাতে পরিবর্তন করব?
পিচব্ল্যাক 408

52

কলামটির নাম সংরক্ষণ করুন এবং ইনপুট কলাম হিসাবে একই নাম ব্যবহার করে অতিরিক্ত কলাম সংযোজন এড়ান:

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

4
ধন্যবাদ আমি কীভাবে আসল কলামের নামটি ধরে রাখতে পারি তা খুঁজে
পেয়েছিলাম

সংক্ষিপ্ত স্ট্রিং ডেটা ধরণের স্পার্ক শনাক্ত করবে এমন কোনও তালিকা রয়েছে?
আলফ্রেডক্স

4
এই from pyspark.sql.types import IntegerType for ftr in ftr_list: df = df.withColumn(f, df[f].cast(IntegerType()))
দ্রবণটি

11

প্রদত্ত উত্তরগুলি সমস্যার সাথে মোকাবিলা করার জন্য যথেষ্ট তবে আমি অন্য একটি উপায়ে ভাগ করতে চাই যা স্পার্কের নতুন সংস্করণটি প্রবর্তিত হতে পারে (আমি এটি সম্পর্কে নিশ্চিত নই) সুতরাং প্রদত্ত উত্তরটি এটি ধরেনি।

আমরা col("colum_name")কীওয়ার্ড সহ স্পার্ক স্টেটমেন্টে কলামে পৌঁছাতে পারি :

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

5

পাইপার্ক সংস্করণ:

  df = <source data>
  df.printSchema()

  from pyspark.sql.types import *

  # Change column type
  df_new = df.withColumn("myColumn", df["myColumn"].cast(IntegerType()))
  df_new.printSchema()
  df_new.select("myColumn").show()

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.