如何在 PySpark 中从 Pandas 的 DatetimeIndex 转换为 DataFrame?



我有以下代码:

# 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

相关内容

  • 没有找到相关文章