我有以下代码:
# 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和一个我有一个日期列表的熊猫数据帧。然后我检查了 df3,但看起来 lit 只是一个空列表:
++
||
++
||
||
||
||
||
||
||
||
发生了什么事情?
在您的情况下d
DatetimeIndex
.你可以做的是从DatetimeIndex
创建熊猫数据帧,然后将熊猫DF转换为Spark DF。PFB 示例代码。
1. 创建日期时间索引
import pandas as pd
d = pd.date_range('2018-12-01', '2019-01-02', freq='MS')
2. 创建熊猫DF。
p_df = pd.DataFrame(d)
3. 创建 Spark 数据帧。
spark.createDataFrame(p_df).show()
d
是一个DatetimeIndex
,而不是熊猫的数据框。您需要先将其转换为数据框,这可以使用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|
+-------------------+
现在我们可以使用 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