SparkSQL在现有列的基础上向数据框添加新列

时间:2015-08-25 14:04:01

标签: scala apache-spark apache-spark-sql

我在SparkSQL上面临关于DateFrame的以下问题。 我基于avro文件加载到spark-shell中的DateFrame具有以下结构:

 intel_idle.max_cstate=0 processor.max_cstate=0 idle=halt

我尝试添加一个新的列,将Zeitstempel( - > Timestamp,格式:1990-10-10 19:30:30)转换为毫秒:

  1. [id: bigint, Nachrichtentyp: bigint, MelderID: bigint, Wartung: bigint, Ruestung: bigint, Fehler: bigint, Leerlauf: bigint, Zeitstempel: string]

  2. val df = sqlContext.load("hdfs://quickstart/user/hive/warehouse/ma_transport2/077cf09f-b157-40a7-9d70-b5b9f70550d9.avro", "com.databricks.spark.avro").orderBy("Zeitstempel")

  3. val d = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")

  4. vall dtFunc: (String => Long) = (arg1: String) => DateTime.parse(arg1, d).getMillis()

  5. val dtFunc2 = udf(dtFunc)

  6. val x = df.withColumn("dt", dtFunc2(col("Zeitstempel")))

  7. 错误-消息:

    x.show()

    安迪的帮助非常感谢!

    谢谢! PL

1 个答案:

答案 0 :(得分:0)

问题解决了:

而是拆分第2步和第3步:

def dtFunc: (String => Long) = (arg1: String) => DateTime.parse(arg1, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).getMillis()