我在Pyspark 2个dataframes已经合并了两天左右。首先是约6000000特征量x 2600行,第二个是约30特征量x 2600行。我怀疑这么久什么正在为前合并火花的实际准备。这里是我的代码:
from pyspark.sql import SQLContext
import pyspark
from pyspark.sql.functions import col, split, create_map, lit
from pyspark.ml import Pipeline
from pyspark.ml.classification import RandomForestClassifier
from pyspark.ml.feature import IndexToString, StringIndexer, VectorIndexer
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
sql_c = SQLContext(sc)
df = sql_c.read.option("maxColumns", 10000000).option("header", "true").options(samplingRatio=0.01).option("inferSchema", "true").csv('join_rows_no_prepended_new_line.csv')
df2 = sql_c.read.option("maxColumns", 10000000).option("header", "true").options(samplingRatio=0.01).option("inferSchema", "true").option("delimiter", "\t").csv('metadata_merged.txt')
#create a new column with a SampleID that matches the SampleID columns from the metadata df.
df = df.withColumn('#SampleID', split(df['# Gene Family'], '\_')[0])
df = df.drop("# Gene Family")
feature_cols = df.columns
df = df.join(df2, col("df.SampleID Gene Family")==col("df2.#SampleID"), how='inner')
最后一行是运行单线程两天的一个。有没有更好的办法在数据准备或别的什么方面为此在Pyspark?
谢谢。
这些问题的一部分可以很容易地处理(例如回落至RDD API来加载,解析和组装数据应涉及优化的瓶颈),其他可能要求对工作显著量(与短数据的功能子集整体模型可以高效的进行培训平行,只要可以确保到数据有效的选择性访问)。现在的问题是,如果真的是值得的 - 什么能不能在内存中的中档服务器上处理 - 数据尺寸的数据范围内的某处100GB建议。
*那当然是不特定的火花。分布式处理工具大多默认情况下在那里做类似的假设。