Преобразовать столбец DataFrame, если его DateTime в Longtype, в противном случае сохраните один и тот же столбецPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразовать столбец DataFrame, если его DateTime в Longtype, в противном случае сохраните один и тот же столбец

Сообщение Anonymous »

У меня есть данные Data с столбцами entry_transaction, create_date, update_date, transaction_date .

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

Created_date
, updated_date -это строки с yyyy-mm-dd hh: mm: ss.sss , а Transaction_day находится в длинных миллисекундах. Мне нужно пройти через столбцы, и если столбец находится в формате DateTime, конвертируется в Long, иначе сохраните значение по умолчанию, а также примените DataType из файла схемы. колонны Поэтому мне нужно использовать для цикла и динамически применить это изменение, проверив, является ли столбец столбец DateTime.from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("example").getOrCreate()

data = [("2025-03-12 18:47:33.943", "1735862400000", "2025-03-12 18:47:33.943", "2025-03-12 18:47:33.943"), ("2025-03-12 10:47:33.943", "1735862400000", "2025-03-12 12:47:33.943", "2025-03-12 16:47:33.943"), ("2025-03-01 18:47:33.943", "1735862400000", "2025-03-04 18:47:33.943", "2025-03-12 18:47:33.943")]
columns = ["entry_transaction", "transaction_date", "creation_date", "updated_date"]

df = spark.createDataFrame(data, columns)
df.show()
df2 = df.select("entry_transaction","transaction_date", "creation_date", "updated_date")

schema = StructType([StructField('entry_transaction', LongType(), True), StructField('transaction_date', StringType(), True), StructField('creation_date', LongType(), True), StructField('updated_date', LongType(), True)])

for field in schema.fields:
print(field.name, field.dataType)
df2 = df2.withColumn(
field.name,
unix_timestamp(col(field.name).cast(TimestampType())) * 1000000 if to_date(col(field.name), "yyyy-MM-dd").isNotNull else df2[field.name])
sorted_columns = sorted(df2.columns)
df_reordered = df2.select(sorted_columns)
display(df_reordered)
< /code>
Ожидаемый вывод:
< /p>
Но я получаю null для transaction_date

Пожалуйста, помогите, как получить правильный фрейм данных. Спасибо,

Подробнее здесь: https://stackoverflow.com/questions/795 ... he-same-co
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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