2017-05-17 13 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 –