मैं दिन, महीने, आदि के लिए कॉलम के साथ कैलेंडर फ़ाइल बनाने की कोशिश कर रहा हूं। निम्न कोड ठीक काम करता है, लेकिन मुझे वर्ष के सप्ताह को निकालने का एक साफ तरीका नहीं मिला (1-52)। spark 3.0+ में, कोड की निम्न पंक्ति काम नहीं करती: .withColumn("week_of_year", date_format(col("day_id"), "W"))

मुझे पता है कि मैं एक दृश्य/तालिका बना सकता हूं और फिर week_of_year निकालने के लिए उस पर एक SQL क्वेरी चला सकता हूं, लेकिन क्या इसे करने का कोई बेहतर तरीका नहीं है? `

df.withColumn("day_id", to_date(col("day_id"), date_fmt))
.withColumn("week_day", date_format(col("day_id"), "EEEE"))
.withColumn("month_of_year", date_format(col("day_id"), "M"))
.withColumn("year", date_format(col("day_id"), "y"))
.withColumn("day_of_month", date_format(col("day_id"), "d"))
.withColumn("quarter_of_year", date_format(col("day_id"), "Q"))
1
ATidedHumour 7 जून 2021, 17:25

2 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि वे पैटर्न अब चिंगारी 3+ . में समर्थित नहीं हैं

Caused by: java.lang.IllegalArgumentException: All week-based patterns are unsupported since Spark 3.0, detected: w, Please use the SQL function EXTRACT instead

आप इसका उपयोग कर सकते हैं:

 import org.apache.spark.sql.functions._

df.withColumn("week_of_year", weekofyear($"date"))

परीक्षण

इनपुट

    val df  = List("2021-05-15", "1985-10-05")
               .toDF("date")
               .withColumn("date", to_date($"date", "yyyy-MM-dd")

df.show
    +----------+
    |      date|
    +----------+
    |2021-05-15|
    |1985-10-05|
    +----------+

आउटपुट

 df.withColumn("week_of_year", weekofyear($"date")).show
+----------+------------+
|      date|week_of_year|
+----------+------------+
|2021-05-15|          19|
|1985-10-05|          40|
+----------+------------+
1
SCouto 7 जून 2021, 17:54

आपने जो अपवाद देखा, उसके बजाय EXTRACT SQL फ़ंक्शन का उपयोग करने की अनुशंसा करें https://spark.apache.org/docs/3.0.0/api/sql/index.html#extract

 val df =  Seq(("2019-11-16 16:50:59.406")).toDF("input_timestamp")
 df.selectExpr("input_timestamp", "extract(week FROM input_timestamp) as w").show
 +--------------------+---+
 |     input_timestamp|  w|
 +--------------------+---+
 |2019-11-16 16:50:...| 46|
 +--------------------+---+
1
Artem Aliev 7 जून 2021, 17:48