我想使用python在s3存储桶中复制一个文件.
例如:我有桶名=测试.在存储桶中,我有2个文件夹名称"转储"和"输入".现在我想使用python将文件从本地目录复制到S3"dump"文件夹...任何人都可以帮助我吗?
我想直接抓取互联网文件并将其粘贴到S3存储桶中,然后将其复制到PIG集群.由于文件的大小和我不太好的互联网连接,首先将文件下载到我的电脑上,然后将其上传到亚马逊可能不是一个选择.
有什么方法可以抓住互联网文件并将其直接插入S3吗?
我想将.csv文件转换为.parquet文件.
csv文件(Temp.csv)具有以下格式
1,Jon,Doe,Denver
Run Code Online (Sandbox Code Playgroud)
我使用以下python代码将其转换为镶木地板
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.types import *
import os
if __name__ == "__main__":
sc = SparkContext(appName="CSV2Parquet")
sqlContext = SQLContext(sc)
schema = StructType([
StructField("col1", IntegerType(), True),
StructField("col2", StringType(), True),
StructField("col3", StringType(), True),
StructField("col4", StringType(), True)])
dirname = os.path.dirname(os.path.abspath(__file__))
csvfilename = os.path.join(dirname,'Temp.csv')
rdd = sc.textFile(csvfilename).map(lambda line: line.split(","))
df = sqlContext.createDataFrame(rdd, schema)
parquetfilename = os.path.join(dirname,'output.parquet')
df.write.mode('overwrite').parquet(parquetfilename)
Run Code Online (Sandbox Code Playgroud)
结果只是一个名为的文件夹,output.parquet而不是我正在寻找的镶木地板文件,然后在控制台上出现以下错误.
我也尝试运行以下代码来面对类似的问题.
from pyspark.sql import SparkSession
import os
spark = SparkSession \
.builder \ …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个大的镶木地板文件写入磁盘(大于内存)。我天真地认为我可以聪明地使用 ParquetWriter 和 write_table 增量写入文件,如下所示(POC):
import pyarrow as pa
import pyarrow.parquet as pq
import pickle
import time
arrow_schema = pickle.load(open('schema.pickle', 'rb'))
rows_dataframe = pickle.load(open('rows.pickle', 'rb'))
output_file = 'test.parq'
with pq.ParquetWriter(
output_file,
arrow_schema,
compression='snappy',
allow_truncated_timestamps=True,
version='2.0', # Highest available schema
data_page_version='2.0', # Highest available schema
) as writer:
for rows_dataframe in function_that_yields_data()
writer.write_table(
pa.Table.from_pydict(
rows_dataframe,
arrow_schema
)
)
Run Code Online (Sandbox Code Playgroud)
但即使我生成了块(比如我的例子中的 10000 行)并使用write_table它仍然将整个数据集保留在内存中。
事实证明,ParquetWriter 将整个数据集保留在内存中,同时增量写入磁盘。
是否有办法强制 ParquetWriter 不将整个数据集保留在内存中,或者出于充分的原因根本不可能?