代码之家  ›  专栏  ›  技术社区  ›  Bidisha Mukherjee

pyspark中ML算法的训练

  •  0
  • Bidisha Mukherjee  · 技术社区  · 6 年前

    我是Pyspark的新手,正在尝试在Pyspark中创建ML模型 我的目标是创建一个TFidf矢量器,并将这些特征传递给我的SVM模型。 我试过这个

    import findspark
    findspark.init()
    from pyspark import SparkContext, SparkConf
    
    conf = SparkConf().setMaster("local[2]").setAppName("Stream")
    sc = SparkContext(conf=conf)
    parallelized = sc.parallelize(Dataset.CleanText)
                 #dataset is a pandas dataframe with CleanText as one of the column
    from pyspark.mllib.feature import HashingTF, IDF
    hashingTF = HashingTF()
    tf = hashingTF.transform(parallelized)
    
    # While applying HashingTF only needs a single pass to the data, applying IDF needs two passes:
    # First to compute the IDF vector and second to scale the term frequencies by IDF.
    #tf.cache()
    idf = IDF().fit(tf)
    tfidf = idf.transform(tf)
    
    print ("vecs: ",tfidf.glom().collect())
             #This is printing all the TFidf vectors
    
    
    import numpy as np
    labels = np.array(Dataset['LabelNo'])
    

    现在,我应该如何将这些Tfidf和标签值传递给我的模型?

    我跟踪了这个 http://spark.apache.org/docs/2.0.0/api/python/pyspark.mllib.html

    并尝试将标记点创建为

    from pyspark.sql import SparkSession
    from pyspark.ml.linalg import Vectors
    spark = SparkSession.builder.appName("SparkSessionZipsExample").getOrCreate()
    
    dd = [(labels[i], Vectors.dense(tfidf[i])) for i in range(len(labels))]
    df = spark.createDataFrame(sc.parallelize(dd),schema=["label", "features"])
    
    print ("df: ",df.glom().collect())
    

    但这给了我一个错误:

    ---–Œª15 dd=[(标签[i],向量。密集(tfidf[i]),对于范围内的i(len(标签))] 16 df=火花。createDataFrame(sc.parallelize(dd),模式=[“label”,“features”]) 17

    TypeError:“RDD”对象不支持索引

    1 回复  |  直到 6 年前
        1
  •  0
  •   pauli    6 年前

    错误清楚地解释了自己 RDD does not support indexing . 您正在尝试获取 ith 第行,共行 tfidf 通过使用 i 作为其索引( tfidf[i] 第15行)。RDD不像列表那样工作。RDD是分布式数据集。行随机分配给工人。

    您必须收集 词频-逆向文件频率 如果您想让代码正常工作,那么可以将其迁移到单个节点,但这将无法实现spark这样的分布式框架的目的。

    我建议您使用数据帧而不是RDD,因为它们比RDD和 ml lib支持 mllib .