2017-05-17 84 views
0

私はこのようなデータを持っています。私はlow列を整数に変換したいです。たとえば、01:23.0の場合、1 * 60 + 23 = 83にします。pysparkで文字列変換を行う方法は?

これを行う方法は?私はudfを試みたが、それはあなたがあなたの期待出力に到達する組み込み関数を使用することができ、udfを必要としないPy4JJavaError

df = sqlContext.createDataFrame([ 
    ('01:23.0', 'z', 'null'), 
    ('01:23.0', 'z', 'null'), 
    ('01:23.0', 'c', 'null'), 
    ('null', 'null', 'null'), 
    ('01:24.0', 'null', '4.0')], 
    ('low', 'high', 'normal')) 

    def min2sec(v): 
     if pd.notnull(v): 
      return int(v[:2]) * 60 + int(v[3:5]) 

    udf_min2sec = udf(min2sec, IntegerType()) 
    df.withColumn('low', udf_min2sec(df['low'])).show() 

答えて

2

を提起:

from pyspark.sql.functions import split, col 

df.withColumn("test", split(col("low"),":").cast("array<int>")) \ 
    .withColumn("test", col("test")[0]*60 + col("test")[1]).show() 
+-------+----+------+----+ 
| low|high|normal|test| 
+-------+----+------+----+ 
|01:23.0| z| null| 83| 
|01:23.0| z| null| 83| 
|01:23.0| c| null| 83| 
| null|null| null|null| 
|01:24.0|null| 4.0| 84| 
+-------+----+------+----+ 
+0

それは動作します。 a a a a a –

関連する問題