我是一个非常新的火花,我还在用我的第一次测试。我安装了一个节点,并且我在一个运行良好的服务器上使用它作为我的主节点:
pyspark --master local[20]
当然,我在使用pyspark的第一步时遇到了一些困难。
我有一个40GB的CSV文件和大约3亿行。我想要做的是找到最快的方法来分割这个文件并制作它的小包并将它们存储为CSV文件。为此,我有两种情况:
第一个。不带任何条件拆分文件。只需将它分成100块(每块300万行)。
第二个。我加载的CSV数据是一个表格,我有一列 X ,有100K不同的ID。我喜欢做的是创建一组词典并创建较小的CSV文件片段,我的词典将告诉我每行应该去哪个包。
到目前为止,这就是我现在所处的位置:
sc=SparkContext.getOrCreate()
file_1 = r'D:\PATH\TOFILE\data.csv'
sdf = spark.read.option("header","true").csv(file_1, sep=";", encoding='cp1252')
感谢您的帮助!
答案 0 :(得分:1)
最好(也可能是#34;最快")这样做的方法是利用Spark内置的RDD分区并从每个分区写入一个CSV文件。您可以repartition
或coalesce
创建所需数量的分区(例如,100)。这将为您提供最大的并行度(基于您的群集资源和配置),因为每个Spark Executor一次处理一个分区上的任务。
您可以执行以下任一操作:
对数据帧执行mapPartition
并将每个partition
写入唯一的CSV文件。
OR df.write.partitionBy("X").csv('mycsv.csv')
,它将为"X"
请注意。如果使用HDFS存储CSV文件,Spark将自动创建多个文件来存储不同的分区(创建的文件数= RDD分区数)。
答案 1 :(得分:1)
您可以高效地加载Pandas的大尺寸csv文件。有人在stackexchange上制定了基准。您可以将数据加载到数据框中,然后拆分数据框 到Numpy的小块。您还可以使用Pandas将新数据帧保存为csv文件。
示例代码段:
import pandas as pd
import numpy as np
将csv文件加载到dataframe
df = pd.read_csv('YOUR_CSV_FILE_PATH')
将整个数据框分成3部分
np.split(df, 3)
将数据框保存为csv文件
df_1.to_csv('YOUR_NEW_CSV_FILE_PATH')
答案 2 :(得分:0)
我最后做的是将数据加载为spark数据帧,spark会自动创建相同大小的128MB(hive的默认配置),然后我使用repartition
方法根据值重新分配我的行对于我的数据框上的特定列。
# This will load my CSV data on a spark dataframe and will generate the requiered amount of 128MB partitions to store my raw data.
sdf = spark.read.option('header','true').csv(file_1, sep=';', encoding='utf-8')
# This line will redistribute the rows of each paritition according the values on a specific column. Here I'm placing all rows with the same set of values on the same partition and I'm creating 20 of them. (Sparks handle to allocate the rows so the partitions will be the same size)
sdf_2 = sdf.repartition(20, 'TARGET_COLUMN')
# This line will save all my 20 partitions on different csv files
sdf_2.write.saveAsTable('CSVBuckets', format='csv', sep=';', mode='overwrite', path=output_path, header='True')
答案 3 :(得分:0)
分割CSV文件最简单的方法是使用称为split
的Unix实用程序。
只是google split unix命令行。
我使用split -l 3500 XBTUSDorderbooks4.csv orderbooks