web-dev-qa-db-ja.com

データフレームに追加の列としてタイムスタンプを追加するにはどうすればよいですか?

*こんにちは、みんな、

皆さんに簡単な質問があります。 kafka createStreamメソッドを使用したスト​​リーミングから作成されたRDDがあります。データフレームに変換する前に、このrddに値としてタイムスタンプを追加したいと思います。に値を追加しようとしました。 withColumn()で使用しているが、このエラーを返すデータフレーム*

val topicMaps = Map("topic" -> 1)
    val now = Java.util.Calendar.getInstance().getTime()

    val messages = KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](ssc, kafkaConf, topicMaps, StorageLevel.MEMORY_ONLY_SER)

      messages.foreachRDD(rdd =>
          {

            val sqlContext = new org.Apache.spark.sql.SQLContext(sc)
            import sqlContext.implicits._

            val dataframe = sqlContext.read.json(rdd.map(_._2))



        val d =dataframe.withColumn("timeStamp_column",dataframe.col("now"))

val d = dataframe.withColumn( "timeStamp_column"、dataframe.col( "now"))org.Apache.spark.sql.AnalysisException:(action、device_os_ver、device_type、event_name、item_name、latの間で "now"列名を解決できません、lon、memberid、productUpccd、tenantid); org.Apache.spark.sql.DataFrame $$ anonfun $ resolve $ 1.apply(DataFrame.scala:15

DataFrameは不変であるため変更できないことがわかったので、RDDも不変です。次に、それを行うための最良の方法は何ですか。 RDDに値を設定する方法(RDDにタイムスタンプを動的に追加する)。

6

Current_timestamp関数を試してください。

current_timestamp() //org.Apache.spark.sql.functions._    
df.withColumn("time_stamp", lit(current_timestamp()))
9
venkat

これは私にとってはうまくいきます。私は通常、この後に書き込みを実行します。

val d = dataframe.withColumn("SparkLoadedAt", current_timestamp())
3
Squidy666

タイムスタンプのような定数を持つ新しい列を追加するには、litfunctionを使用できます。

import org.Apache.spark.sql.functions._
val newDF = oldDF.withColumn("timeStamp_column", lit(System.currentTimeMillis))
2
Javier Montón

Scala/Databricksの場合:

import org.Apache.spark.sql.functions._
val newDF = oldDF.withColumn("Timestamp",current_timestamp())

私の出力を参照してください

0
Zahid Maqbool