如何在pyspark中通过反射方法获得firstDayOfWeek



我试图得到一周的第一天,试图找出它是星期一还是星期日与下面的代码,但我得到下面的错误

spark.sql("""Select
reflect("java.util.Calendar", "getFirstDayOfWeek") as test
""").show(20,False)

数据类型不匹配:找不到与java.util.Calendar中的参数类型匹配的静态方法

您只能传递特定类中可用的静态方法来反映函数。为了实现所需的输出,我们可以通过使用python的datetime或调用Calendar类中可用的getInstance静态方法来定义UDF,并使用regex提取getFirstDayOfWeek。

from pyspark.sql import *
from pyspark.sql.functions import *
spark = SparkSession.builder.master("local[*]").getOrCreate()
spark.sql("select reflect('java.util.Calendar', 'getInstance') as calendar") 
.withColumn("firstDayOfWeek", regexp_extract("calendar", ".*firstDayOfWeek=(\d+).*", 1)) 
.show()  
+--------------------+--------------+
|            calendar|firstDayOfWeek|
+--------------------+--------------+
|java.util.Gregori...|             1|
+--------------------+--------------+