Почему я получаю нулевые результаты от функции date_format() PySpark?Python

Программы на Python
Anonymous
Почему я получаю нулевые результаты от функции date_format() PySpark?

Сообщение Anonymous »

Предположим, существует датафрейм со столбцом, состоящим из дат в виде строк. Для этого предположения в качестве примера мы создадим следующий dataFrame:

Код: Выделить всё

# Importing sql types
from pyspark.sql.types import StringType, IntegerType, StructType, StructField, DoubleType, FloatType, DateType
from pyspark.sql.functions  import date_format
import random
import time

def strTimeProp(start, end, format, prop):
stime = time.mktime(time.strptime(start, format)) # Parse a string representing a time according to a format
etime = time.mktime(time.strptime(end, format))
ptime = stime + prop * (etime - stime)
return time.strftime(format, time.localtime(ptime))

def randomDate(start, end, prop):
return strTimeProp(start, end, '%m-%d-%Y', prop)

# Creación de un dataframe de prueba:
schema = StructType(
[
StructField("dates1", StringType(), True),
StructField("dates2",  StringType(), True)
]
)

size = 32
numCol1 = [str(randomDate("1-1-1991", "1-1-1992", random.random())) for number in range(size)]
numCol2 = [str(randomDate("1-1-1991", "1-1-1992", random.random())) for number in range(size)]
# Building dataFrame:
sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame(list(zip(numCol1, numCol2)),schema=schema)
df.show(5)
В приведенном выше коде генерируется столбец случайной даты, вот пример:

Код: Выделить всё

+----------+----------+
|    dates1|    dates2|
+----------+----------+
|12-21-1991|05-30-1991|
|05-28-1991|01-23-1991|
|03-01-1991|08-05-1991|
|07-15-1991|05-13-1991|
|07-21-1991|11-10-1991|
+----------+----------+
Я пытаюсь изменить формат даты с помощью следующего кода (из документации pySpark):

Код: Выделить всё

# Changing date formats:
df.select(date_format('dates1', 'MM-dd-yyy').alias('newFormat')).show(5)
Но я получаю такой плохой результат:

Код: Выделить всё

+---------+
|newFormat|
+---------+
|     null|
|     null|
|     null|
|     null|
|     null|
+---------+
Я предполагаю, что проблема связана со строковым типом данных, но в то же время я не понимаю, почему этот код ниже работает, а код выше — нет.

Код: Выделить всё

fechas = ['1000-01-01', '1000-01-15']
df = sqlContext.createDataFrame(list(zip(fechas, fechas)), ['dates', 'd'])
df.show()

# Changing date formats:
df.select(date_format('dates', 'MM-dd-yyy').alias('newFormat')).show()
Вывод:

Код: Выделить всё

+----------+----------+
|     dates|         d|
+----------+----------+
|1000-01-01|1000-01-01|
|1000-01-15|1000-01-15|
+----------+----------+

+----------+
| newFormat|
+----------+
|01-01-1000|
|01-15-1000|
+----------+
Этот последний результат — это то, что мне нужно.

Подробнее здесь: https://stackoverflow.com/questions/360 ... k-function

Вернуться в «Python»