jolly-florist-66728
10/03/2024, 7:59 PM@task()
def fetch_and_upload_data(load_type: str) -> FlyteFile:
import os
timestamps = pd.date_range(start="2024-01-01", periods=96, freq='15T')
# Sample data for site PV and temperature
np.random.seed(0)
pv_data = np.random.uniform(low=0, high=100, size=len(timestamps)) # PV generation in kW
temperature_data = np.random.uniform(low=-10, high=35, size=len(timestamps)) # Temperature in Celsius
# Create a DataFrame
data = pd.DataFrame({
'Timestamp': timestamps,
'site': pv_data,
'temperature': temperature_data
})
execution_id = current_context().execution_id.name
raw_data_path_remote = f"<s3://jielian-dev/{execution_id}/raw_data_{load_type}_2022-08-31T17:00:00Z_2023-03-03T11:00:00Z.csv>"
# write to local path
raw_data_path_local = Path(flytekit.current_context().working_directory) / f"{execution_id}/raw_data_{load_type}_2022-08-31T17:00:00Z_2023-03-03T11:00:00Z.csv"
directory = Path(flytekit.current_context().working_directory) / f"{execution_id}"
if not os.path.exists(directory):
os.makedirs(directory)
data.to_csv(raw_data_path_local)
return FlyteFile(path=raw_data_path_local.__str__(),
remote_path=raw_data_path_remote
)
# Answer
The error you're encountering is likely due to incorrect handling of the S3 path in the FlyteFile object. According to this discussion, FlyteFile should automatically handle the upload to S3 if the remote path is correctly specified. Ensure that the S3 path is correctly formatted and that Flyte has the necessary permissions to access the S3 bucket.
Here's a corrected version of your task:jolly-florist-66728
10/03/2024, 7:59 PM>>```from flytekit import task, current_context, FlyteFile import pandas as pd import numpy as np import os from pathlib import Path @task() def fetch_and_upload_data(load_type: str) -> FlyteFile: timestamps = pd.date_range(start="2024-01-01", periods=96, freq='15T') # Sample data for site PV and temperature np.random.seed(0) pv_data = np.random.uniform(low=0, high=100, size=len(timestamps)) # PV generation in kW temperature_data = np.random.uniform(low=-10, high=35, size=len(timestamps)) # Temperature in Celsius # Create a DataFrame data = pd.DataFrame({ 'Timestamp': timestamps, 'site': pv_data, 'temperature': temperature_data }) execution_id = current_context().execution_id.name raw_data_path_remote = f"s3://jielian-dev/{execution_id}/raw_data_{load_type}_2022-08-31T17:00:00Z_2023-03-03T11:00:00Z.csv" # write to local path raw_data_path_local = Path(current_context().working_directory) / f"{execution_id}/raw_data_{load_type}_2022-08-31T170000Z_2023-03-03T110000Z.csv" directory = Path(current_context().working_directory) / f"{execution_id}" if not os.path.exists(directory): os.makedirs(directory) data.to_csv(raw_data_path_local) return FlyteFile(path=str(raw_data_path_local), remote_path=raw_data_path_remote) ``` Make sure that: 1. The S3 path is correctly formatted without angle brackets. 2. Flyte has the necessary permissions to write to the specified S3 bucket. Would you like more details on configuring Flyte permissions or any other aspect of Flyte? Sources: - FlyteFile class usage - FlyteFile documentation Slack Link https://.slack.com/archives/CP2HDHKE1/p1727985567.960439 👍 0 button 👎 0 button 💡 Hint: Mention @runllm in the thread for followups.