如何在 PySpark 中将 Pandas' DatetimeIndex 转换为 DataFrame?

How to convert from Pandas' DatetimeIndex to DataFrame in PySpark?

我有以下代码:

# Get the min and max dates
minDate, maxDate = df2.select(f.min("MonthlyTransactionDate"), f.max("MonthlyTransactionDate")).first()
d = pd.date_range(start=minDate, end=maxDate, freq='MS')    

tmp = pd.Series(d)
df3 = spark.createDataFrame(tmp)

我检查了 tmp 并且我有一个日期列表的 pandas 数据框。 然后我检查了 df3,但它看起来只是一个空列表:

++ 
|| 
++ 
|| 
|| 
|| 
|| 
|| 
|| 
|| 
||

发生了什么事?

dDatetimeIndex,不是 pandas 数据框。您需要先将其转换为数据框,这可以使用 to_frame 方法完成:

d = pd.date_range('2018-10-10', '2018-12-15', freq='MS')
spark.createDataFrame(d).show()
++
||
++
||
||
++

spark.createDataFrame(d.to_frame()).show()
+-------------------+
|                  0|
+-------------------+
|2018-11-01 00:00:00|
|2018-12-01 00:00:00|
+-------------------+

在你的情况下 dDatetimeIndex。您可以做的是从 DatetimeIndex 创建 pandas DataFrame,然后将 Pandas DF 转换为 spark DF。 PFB 示例代码。

1。创建日期时间索引

import pandas as pd
d = pd.date_range('2018-12-01', '2019-01-02', freq='MS')

2。创建 Pandas DF.

p_df = pd.DataFrame(d)

3。创建 Spark DataFrame。

spark.createDataFrame(p_df).show()

现在我们可以使用 pyspark pandas。 https://databricks.com/blog/2021/10/04/pandas-api-on-upcoming-apache-spark-3-2.html

导入 pyspark.pandas 作为 pd

所以我们可以在 .to_dataframe() 之后使用 .to_spark() 作为 pyspark 的数据帧。

https://spark.apache.org/docs/latest/api/python//reference/pyspark.pandas/api/pyspark.pandas.DataFrame.to_spark.html?highlight=to_spark#pyspark.pandas.DataFrame.to_spark