从pyspark到pandas传递日期时间的正确方法

siotufzp  于 2023-04-28  发布在  Spark
关注(0)|答案(1)|浏览(139)

我尝试将spark dataframe转换为pandas,但它在新版本的pandas上出错,并在旧版本的pandas上警告用户。
在python==3.9、pyspark==3.4.0和pandas==1.5.3上,警告如下所示:

/Users/[me]/miniconda3/envs/py39/lib/python3.9/site-packages/pyspark/sql/pandas/conversion.py:251: FutureWarning: Passing unit-less datetime64 dtype to .astype is deprecated and will raise in a future version. Pass 'datetime64[ns]' instead
  series = series.astype(t, copy=False)

我没有pandas==2.0.0上的确切错误的副本,但它基本上是一样的,它希望你传递datetime64[ns]。
下面是pyspark中抛出此错误的行。
下面是一个我正在尝试执行的导致此错误的示例:

from pyspark.sql.types import StructType,StructField, StringType, IntegerType, TimestampType, FloatType
from pyspark.sql import SparkSession

spark = (
  SparkSession
  .builder
  .getOrCreate()
)

testAggData = [
  {
    'postId': '1234567',
    'title': 'Test1',
    'createdTSUTC': datetime.strptime('2023-04-19 03:14:30', '%Y-%m-%d %H:%M:%S'),
  },
  {
    'postId': '1234568',
    'title': 'Test2',
    'createdTSUTC': datetime.strptime('2023-04-20 03:14:30', '%Y-%m-%d %H:%M:%S'),
  }
]
testSchema = StructType([
  StructField("postId",StringType(),False),
  StructField("title",StringType(),False),
  StructField("createdTSUTC", TimestampType(), False),
])
testAggDataDf = spark.createDataFrame(testAggData, testSchema).toPandas()
vlju58qv

vlju58qv1#

我想出来了,pyspark 3.4.0 requires pandas 1.0.5。所以我想我在安装其他东西的时候升级了pandas,没有意识到这个要求。降级pandas解决了这个问题。

相关问题