在pyspark中使用numpy busday_计数函数

在pyspark中使用numpy busday_计数函数,numpy,pyspark,Numpy,Pyspark,假设pyspark中有两列不为null: df2 = sqlContext.sql("SELECT AssignedDate,primaryid from parts_so where AssignedDate is not null ") df2 = df2.withColumn('sdate', df2.AssignedDate ) df2 = df2.withColumn('edate',current_timestamp() ) 当我运行df2=df2.withColumn('days

假设pyspark中有两列不为null:

df2 = sqlContext.sql("SELECT AssignedDate,primaryid from parts_so where AssignedDate is not null ")
df2 = df2.withColumn('sdate', df2.AssignedDate )
df2 = df2.withColumn('edate',current_timestamp() )
当我运行
df2=df2.withColumn('days\u untible',lit(get\u hours2(df2.sdate,df2.edate))

我得到以下错误:

object of type 'Column' has no len()

首先,让我们创建一些随机数据

导入日期时间
随机输入
作为pd进口熊猫
将numpy作为np导入
sdate=[datetime.datetime.now()+datetime.timedelta(i)表示范围(5)内的i]
edate=[date+datetime.timedelta(random.random()+3)表示sdate中的日期]
数据={
“sdate”:sdate,
“edate”:edate
}
pdf=pd.DataFrame(数据)
df=spark.createDataFrame(pdf)
df.show()
您不能使用bare函数在pyspark中创建另一列。为此,我们必须创建UDF

注意:请记住,您必须将计算结果强制转换为
int
,因为酸洗numpy类型可能会出现问题

将pyspark.sql.types导入为T
导入pyspark.sql.F函数
@F.udf(returnType=T.IntegerType())
def获取时间2(sdate、edate):
营业日=np.营业日计数(sdate,edate)
返回整数(营业日)
最后,我们可以在创建的数据帧上使用UDF

df=df.withColumn('days_untible',F.lit(get_hours2('sdate','edate'))
df.show()
我希望这对您有所帮助。

需要输入数组。我认为您的日期列不是数组。如果它是数组,您必须对其进行迭代。Pypark还提供了减去日期的函数。您可以读取
object of type 'Column' has no len()
+--------------------+--------------------+
|               edate|               sdate|
+--------------------+--------------------+
|2019-12-06 22:55:...|2019-12-03 08:14:...|
|2019-12-07 19:42:...|2019-12-04 08:14:...|
|2019-12-08 21:26:...|2019-12-05 08:14:...|
|2019-12-09 18:57:...|2019-12-06 08:14:...|
|2019-12-11 04:08:...|2019-12-07 08:14:...|
+--------------------+--------------------+
+--------------------+--------------------+----------------+
|               edate|               sdate|days_outstanding|
+--------------------+--------------------+----------------+
|2019-12-06 22:55:...|2019-12-03 08:14:...|               3|
|2019-12-07 19:42:...|2019-12-04 08:14:...|               3|
|2019-12-08 21:26:...|2019-12-05 08:14:...|               2|
|2019-12-09 18:57:...|2019-12-06 08:14:...|               1|
|2019-12-11 04:08:...|2019-12-07 08:14:...|               2|
+--------------------+--------------------+----------------+