cám ơn em đã thích video của chị, cmt của em đã tiếp thêm động lực cho chị ra tiếp những video như thế này. Đúng là không có những cmt giống như của em, chị thôi làm video lâu rồi ý, vì bỏ nhiều thời gian công sức làm video mà không có ai xem, huhu 😢
Em nghĩ chị có thể làm những khóa học về Data Engineering, Spark rồi up lên Udemy, vì thực sự ko có mấy ai giải thích chi tiết dễ hiểu và cặn kẽ như chị.
Cám ơn bạn rất nhiều về lời nhận xét này, đó cũng chính là điều mà mình muốn mang đến cho cộng đồng DE ở Việt Nam khi xây kênh. Nhờ vào cmt của bạn mà mình biết được rằng mình đã phần nào đó thực hiện được mong muốn của bản thân, cám ơn bạn rất nhiều 🥰
chị ơi cho em hỏi giả xử cột ngày tháng của mình có rất nhiều định dạng thì mình sẽ xử lý như thế nào ạ Em có tìm hiểu được 2 cách sau. cách 1: dùng when df = df.withColumn("normalized_date", when(df["date"].rlike(r'\d{2}/\d{2}/\d{4}'), to_date(df["date"], "dd/MM/yyyy")) .when(df["date"].rlike(r'\d{4}-\d{2}-\d{2}'), to_date(df["date"], "yyyy-MM-dd")) .when(df["date"].rlike(r'\d{2}-[a-zA-Z]{3}-\d{4}'), to_date(df["date"], "dd-MMM-yyyy")) .when(df["date"].rlike(r'\d{2}-[a-zA-Z]{4,}-\d{4}'), to_date(df["date"], "dd-MMMM-yyyy")) .when(df["date"].rlike(r'\d{2}-\d{2}-\d{4}'), to_date(df["date"], "dd-MM-yyyy")) .otherwise(None) ) cách 2: dùng udf def normalize_date(date_str): if date_str is None: return None date_str = date_str.strip().lower()
for pattern, date_format in patterns: if re.match(pattern, date_str): try: date_obj = datetime.strptime(date_str, date_format) return date_obj.strftime('%Y-%m-%d') except ValueError: return None return None # tạo udf normalize_date_udf = udf(normalize_date, StringType()) # tạo column mới ở dạng chuẩn df = df.withColumn("normalized_date", normalize_date_udf(col("date"))) Em thấy cách 1 mình sẽ phải liệt kê tất cả các định dạng ra ví dụ như yyyy-MM-dd tuy dạng này nhưng nếu ngày chỉ có 1 số thì ta phải liệt kê thêm yyyy-MM-d . vậy nên sẽ rất dài. em không biết có cách nào tối ưu hơn để xử lý. và làm sao mình xác định được có những định dạng nào không ạ.
em dùng hàm parse của dateutil.parser để tự động phát hiện định dạng của ngày tháng nhé, sau đó em dùng strftime('%Y-%m-%d) để đưa ngày tháng về dạng yyyy-mm-dd là được nhé
Trong trường date ở định dạng dd-MM-yyyy HH:mm:ss thì xử lý như nào ạ. Em làm tương tự như video thì chương trình báo lỗi. Em có hỏi chat gpt thì nó gợi ý dùng to_timestamp thay cho to_date. Tuy nhiên khi em làm theo thì vẫn báo lỗi.
Tuy tiếng hơi nhỏ nhưng mà video hay với chị chỉ chuyên sâu cách thức hoạt động ít ai làm được như thế. Bật max loa là khác phục được hehe
cám ơn em đã thích video của chị, cmt của em đã tiếp thêm động lực cho chị ra tiếp những video như thế này. Đúng là không có những cmt giống như của em, chị thôi làm video lâu rồi ý, vì bỏ nhiều thời gian công sức làm video mà không có ai xem, huhu 😢
tuyệt vời chị ơi, em cảm ơn ạ !!! Rất hữu ích với em
cám ơn em, cmt của em rất hữu ích với chị 🥰
Em nghĩ chị có thể làm những khóa học về Data Engineering, Spark rồi up lên Udemy, vì thực sự ko có mấy ai giải thích chi tiết dễ hiểu và cặn kẽ như chị.
Cám ơn bạn rất nhiều về lời nhận xét này, đó cũng chính là điều mà mình muốn mang đến cho cộng đồng DE ở Việt Nam khi xây kênh. Nhờ vào cmt của bạn mà mình biết được rằng mình đã phần nào đó thực hiện được mong muốn của bản thân, cám ơn bạn rất nhiều 🥰
chị up lên full khoá spark lên udemy là +1 học sinh ạaaaaa ☺️
@@centuruslee cám ơn bạn đã ủng hộ mình 🥰
tuyệt vời luôn chị ơi
cám ơn bạn, mà bạn nghe có bị âm thanh hơi nhỏ và khó nghe không?
Chị có thế giải thích giúp em cơ chế hoạt động của Shared variables : Broadcast variable và Accumulator được ko ạ. ❤❤❤
Chào bạn, mình đã note yêu cầu của bạn rồi nhé, có dịp thích hợp mình sẽ ra video về chủ đề này :)
chị ơi cho em hỏi giả xử cột ngày tháng của mình có rất nhiều định dạng thì mình sẽ xử lý như thế nào ạ
Em có tìm hiểu được 2 cách sau.
cách 1: dùng when
df = df.withColumn("normalized_date",
when(df["date"].rlike(r'\d{2}/\d{2}/\d{4}'), to_date(df["date"], "dd/MM/yyyy"))
.when(df["date"].rlike(r'\d{4}-\d{2}-\d{2}'), to_date(df["date"], "yyyy-MM-dd"))
.when(df["date"].rlike(r'\d{2}-[a-zA-Z]{3}-\d{4}'), to_date(df["date"], "dd-MMM-yyyy"))
.when(df["date"].rlike(r'\d{2}-[a-zA-Z]{4,}-\d{4}'), to_date(df["date"], "dd-MMMM-yyyy"))
.when(df["date"].rlike(r'\d{2}-\d{2}-\d{4}'), to_date(df["date"], "dd-MM-yyyy"))
.otherwise(None)
)
cách 2: dùng udf
def normalize_date(date_str):
if date_str is None:
return None
date_str = date_str.strip().lower()
patterns = [
(r'\d{4}-\d{1,}-\d{1,}', '%Y-%m-%d'),
(r'\d{1,}/\d{1,}/\d{4}', '%d/%m/%Y'),
(r'\d{1,}-\d{1,}-\d{4}', '%d-%m-%Y'),
(r'\d{1,}-[a-zA-Z]{3}-\d{4}', '%d-%b-%Y'),
(r'\d{1,}-[a-zA-Z]{4,}-\d{4}', '%d-%B-%Y'),
]
for pattern, date_format in patterns:
if re.match(pattern, date_str):
try:
date_obj = datetime.strptime(date_str, date_format)
return date_obj.strftime('%Y-%m-%d')
except ValueError:
return None
return None
# tạo udf
normalize_date_udf = udf(normalize_date, StringType())
# tạo column mới ở dạng chuẩn
df = df.withColumn("normalized_date", normalize_date_udf(col("date")))
Em thấy cách 1 mình sẽ phải liệt kê tất cả các định dạng ra ví dụ như yyyy-MM-dd tuy dạng này nhưng nếu ngày chỉ có 1 số thì ta phải liệt kê thêm yyyy-MM-d . vậy nên sẽ rất dài. em không biết có cách nào tối ưu hơn để xử lý. và làm sao mình xác định được có những định dạng nào không ạ.
em dùng hàm parse của dateutil.parser để tự động phát hiện định dạng của ngày tháng nhé, sau đó em dùng strftime('%Y-%m-%d) để đưa ngày tháng về dạng yyyy-mm-dd là được nhé
Trong trường date ở định dạng dd-MM-yyyy HH:mm:ss thì xử lý như nào ạ. Em làm tương tự như video thì chương trình báo lỗi. Em có hỏi chat gpt thì nó gợi ý dùng to_timestamp thay cho to_date. Tuy nhiên khi em làm theo thì vẫn báo lỗi.
em dùng format_date nhé, tuần tới chị sẽ ra 1 video về cách sử dụng hàm này
@@MaiDE-uq7ws vâng em cảm ơn chị ạ
@@MaiDE-uq7ws Chị có thể làm thêm trường hợp định dạng ngày ở dạng Unix Timestamp và dạng ngày bị chuyển sang dạng dãy số được không ạ?
@@HuyVũ-z2r ok em, chị note yêu cầu rồi nhé, có gì chị sẽ ra thêm video về chủ đề này
video này volume nhỏ hơi khó nghe c ơi
ôi thế à, để mình rút kinh nghiệm, cám ơn bạn đã góp ý nhé