如何单独构建Spark Mllib子模块
我在Spark中修改了MLLIB,并希望在其他项目中使用自定义的MLLIB JAR.当我使用以下方式构建火花时,它可以工作: build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package 从 build/mvn -pl :spark-mllib_2.10 clean install 只是构建mllib本身.它成功构建了,但是,在运行其他使用MLLIB的项目时,我看不到我在MLLIB中所做的更改.虽然当我从头开始构建整个火花时确实有效,但我想知道我应该如何使用maven来单独构建mllib? 解决方案 我怀疑运行应用程序时并未真正使用编译的mllib jar.因此 logInfo(getClass.getProtectionDomain.getCodeSource.getLocation.getPath) 事实证明,Spark正在使用Spark-Asembly-1.
2 2024-04-05
编程技术问答社区
如何将Spark中的分类变量转化为一组编码为{0,1}的列?
我正在尝试用Spark Mllib(带有Scala)在包含分类变量的数据集上执行Logistic Remistion(LogisticRegressionWithLBFGS).我发现Spark无法使用这种变量. 在r中有一种处理这种问题的简单方法:我在因子(类别)中转换了变量,因此r创建了一组编码为{0,1}指示器变量的列. 如何用火花执行此操作? 解决方案 使用 vectorIndexer 您可能可以告诉索引器,一个字段可能具有的不同值(基数)的数量,以便将其视为setMaxCategories()方法. . val indexer = new VectorIndexer() .setInputCol("features") .setOutputCol("indexed") .setMaxCategories(10) 来自 scaladocs : 用于向量数据集中的索引分类特征列的类. 这有2种使用模式: 自动识别分类特征(默认行为)
10 2024-03-30
编程技术问答社区
Spark数据类型猜测器UDAF
想做这样的事情 https://githbithub.com/fitzscott/fitzscott/airquott/airquolation/airquality/airqualy/blob/blob/master/master/master/hivesatatatepepeguesser.java,java,java 并创建一个Hive UDAF来创建一个返回数据类型猜测的聚合函数. Spark是否已经内置了类似的东西? 对于新的宽宽数据集探索数据将非常有用.对ML也会有所帮助,例如决定分类与数值变量. 通常如何确定Spark中的数据类型? P.S.诸如H2O之类的框架会自动确定数据类型扫描数据样本或整个数据集.因此,一个人可以决定例如如果变量应为分类变量或数值. P.P.S.另一个用例是,如果您获得了任意数据集(我们经常得到数据集),并希望将其保存为parquet表. 提供正确的数据类型使Parquet具有更多的空间效率(并且可能更查询时间的性能,例如 比
10 2024-03-30
编程技术问答社区
Spark'的KMeans无法处理大数据吗?
kmeans的训练,初始化模式默认为kmeans ||.问题在于它迅速(小于10分钟)到前13个阶段,但随后完全悬挂,而不会产生错误! 最小示例再现了问题(如果我使用1000点或随机初始化,它将成功): from pyspark.context import SparkContext from pyspark.mllib.clustering import KMeans from pyspark.mllib.random import RandomRDDs if __name__ == "__main__": sc = SparkContext(appName='kmeansMinimalExample') # same with 10000 points data = RandomRDDs.uniformVectorRDD(sc, 10000000, 64) C = KMeans.train(data, 8192, maxItera
8 2024-03-30
编程技术问答社区
如何将mllib矩阵转换为spark数据帧?
我想在Zeppelin笔记本中漂亮打印相关的结果: val Row(coeff: Matrix) = Correlation.corr(data, "features").head 实现此目的的方法之一是将结果转换为单独列中的每个值,并调用z.show(). . 但是,请看矩阵API 我看不到任何方法可以做到这一点. 是否有另一种直接的方法可以实现这一目标? 编辑: 数据框有50列.只需转换为字符串就不会有帮助,因为输出被截断. 解决方案 使用 toString 如果您只想打印矩阵,方法应该是最简单,最快的方法.您可以通过输入打印的最大行数以及最大线宽度来更改输出.您可以通过在新线路上分配和""来更改格式.例如: val matrix = Matrices.dense(2,3, Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)) matrix.toString .split("\n") .map(_.trim.s
20 2024-03-01
编程技术问答社区
为什么foreachRDD不能使用StreamingContext.textFileStream用新内容填充DataFrame?
我的问题是,当我将代码更改为流媒体模式并将数据框放在foreach循环中时,数据框架显示空表!我没有填补!我也不能将其放入汇编器()中.错误是: Error:(38, 40) not enough arguments for method map: (mapFunc: String => U)(implicit evidence$2: scala.reflect.ClassTag[U])org.apache.spark.streaming.dstream.DStream[U]. Unspecified value parameter mapFunc. val dataFrame = Train_DStream.map() 我的train.csv文件如下: import org.apache.spark.ml.feature.VectorAssembler import org.apache.spark.mllib.linalg.Vectors import org
8 2024-03-01
编程技术问答社区
无法在mleap中对逻辑回归进行序列化处理
java.lang.assertionerror:断言失败:此操作仅支持二进制逻辑回归 我试图在姆利普序列化火花管道. 我在管道中使用令牌,hashingtf和LogisticRecression. 当我试图序列化管道时,我会发现上述错误. 这是我用来序列化管道的代码 - val pipeline = Pipeline(pipelineConfig) val model = pipeline.fit(data) (for(bf
10 2024-03-01
编程技术问答社区
Spark CountVectorizer返回udt而不是向量
我尝试创建一个代币计数的向量,以在Spark 2.3.0中进行LDA分析.我遵循了一些教程,每次他们使用CountVectorizer轻松将字符串数组转换为向量. . 我在我的databricks笔记本上运行此简短示例: import org.apache.spark.ml.feature.CountVectorizer val testW = Seq( (8, Array("Zara", "Nuha", "Ayan", "markle")), (9, Array("fdas", "test", "Ayan", "markle")), (10, Array("qwertzu", "test", "Ayan", "fdaf")) ).toDF("id", "filtered") // Set params for CountVectorizer val vectorizer = new CountVectorizer() .setInputCol("fil
12 2024-03-01
编程技术问答社区
Spark MLLib中Kmeans++的初始化步骤参数到底是什么?
我知道k-均值是什么,我也知道k-means ++算法是什么.我相信唯一的变化是找到最初的K中心的方式. 在++版本中,我们最初选择一个中心并使用概率分布,我们选择其余的K-1中心. 在k-means的mllib算法中,什么是initializationSteps参数? 解决方案 是精确的k-means ++是选择初始中心的算法,它没有描述整个训练过程. mllib k-means正在使用 k-Means || 对于初始化,这是++的分布式变体.它不是示例,而是迭代次数的多个点. initializationSteps对应于迭代次数,并根据原始纸张应该大致o(log n).
4 2024-03-01
编程技术问答社区
Spark ML Kmeans给:org.apache.spark.SparkException。执行用户定义的函数($anonfun$2: (vector) => int) 失败
我尝试加载kmeansmodel,然后将标签从中取出: 这是我编写的代码: val kMeansModel = KMeansModel.load(trainedMlModel.mlModelFilePath) val arrayOfElements = measurePoint.measurements.map(a => a._2).toSeq println(s"ArrayOfELements::::$arrayOfElements") val arrayDF = sparkContext.parallelize(arrayOfElements).toDF() arrayDF.show() val vectorDF = new VectorAssembler().setInputCols(arrayDF.columns).setOut
Apache Spark MLlib与DataFrame API在createDataFrame()或read().csv(...)时出现java.net.URISyntaxException。
在独立应用程序中(在Java8上运行,Windows 10带Spark-XXX_2.11:2.0.0作为JAR依赖项)下一个代码给出了一个错误: /* this: */ Dataset logData = spark_session.createDataFrame(Arrays.asList( new LabeledPoint(1.0, Vectors.dense(4.9,3,1.4,0.2)), new LabeledPoint(1.0, Vectors.dense(4.7,3.2,1.3,0.2)) ), LabeledPoint.class); /* or this: */ /* logFile: "C:\files\project\file.csv", "C:\\files\\project\\file.csv", "C:/files/project/file.csv", "file:/C:/files/project
14 2024-03-01
编程技术问答社区
在pySpark (2.3) 中读取本地csv文件
我正在使用Pyspark 2.3,试图读取看起来像这样的CSV文件: 0,0.000476517230863068,0.0008178378961061477 1,0.0008506156837329876,0.0008467260987257776 但行不通: from pyspark import sql, SparkConf, SparkContext print (sc.applicationId) >> data_rdd = spark.textFile(name=tsv_data_path).filter(x.split(",")[0] != 1) 我有一个错误: AttributeError: 'SparkSession' object has no attribute 'textFile' 知道我应该如何在Pyspark 2.3中阅读它? 解决方案 首先,textFile存在于
16 2024-03-01
编程技术问答社区
将dataFrame转换为Scala中的Spark MLLIB矩阵
我有一个名为df的火花数据框架为输入: +---------------+---+---+---+---+ |Main_CustomerID| A1| A2| A3| A4| +---------------+---+---+---+---+ | 101| 1| 0| 2| 1| | 102| 0| 3| 1| 1| | 103| 2| 1| 0| 0| +---------------+---+---+---+---+ 我需要收集A1,A2,A3,A4的值,例如,例如, dm: org.apache.spark.mllib.linalg.Matrix = 1.0 0.0 2.0 1.0 0.0 3.0 1.0 1.0 2.0 1.0 0.0 0.0 如何在Scala中实现此目标? 解决方案 您可以按以下方式进行操作,首先获取应包含在矩阵中的所有列:
12 2024-03-01
编程技术问答社区
如何用包含点/句号的列名创建spark数据框架?
我在列表中有数据,并希望将其转换为Spark DataFrame,其中一个包含"" 的列名称之一. 我编写了以下代码,该代码没有任何错误. input_data = [('retail', '2017-01-03T13:21:00', 134), ('retail', '2017-01-03T13:21:00', 100)] rdd_schema = StructType([StructField('business', StringType(), True), \ StructField('date', StringType(), True), \ StructField("`US.sales`", FloatType(), True)]) input_mock_df = spark.createDataFrame(input_mo
14 2024-03-01
编程技术问答社区
如何使VectorAssembler不压缩数据?
我想使用VectorAssembler将多个列转换为一列,但是默认情况下将数据压缩而没有其他选项. val arr2= Array((1,2,0,0,0),(1,2,3,0,0),(1,2,4,5,0),(1,2,2,5,6)) val df=sc.parallelize(arr2).toDF("a","b","c","e","f") val colNames=Array("a","b","c","e","f") val assembler = new VectorAssembler() .setInputCols(colNames) .setOutputCol("newCol") val transDF= assembler.transform(df).select(col("newCol")) transDF.show(false) 输入是: +---+---+---+---+---+ | a| b| c| e| f| +---+---+
8 2024-03-01
编程技术问答社区
在columnSimilarties()之后获取列名 Spark scala
我正在尝试使用Spark中的columnSimilities()构建基于项目的协作过滤模型.使用"列"()之后,我想将原始列名称分配给Spark Scala中的结果. 可运行的代码来计算数据框架上的columnSimilities(). 数据 // rdd val rowsRdd: RDD[Row] = sc.parallelize( Seq( Row(2.0, 7.0, 1.0), Row(3.5, 2.5, 0.0), Row(7.0, 5.9, 0.0) ) ) // Schema val schema = new StructType() .add(StructField("item_1", DoubleType, true)) .add(StructField("item_2", DoubleType, true)) .add(StructField("item_3", DoubleType, true))
4 2024-03-01
编程技术问答社区
将稀疏的特征向量分解成独立的列
在我的火花数据框架中,我有一个列,其中包括CountVectoriser转换的输出 - 它以稀疏向量格式.我要做的是将此列再次"爆炸"到一个密集的向量中,然后是组件行(以便可以通过外部模型来对其进行评分). 我知道该列中有40个功能,因此以下此示例,我尝试了: import org.apache.spark.sql.functions.udf import org.apache.spark.mllib.linalg.Vector // convert sparse vector to a dense vector, and then to array val vecToSeq = udf((v: Vector) => v.toArray) // Prepare a list of columns to create val exprs = (0 until 39).map(i => $"_tmp".getItem(i).alias(s"exploded_
12 2024-03-01
编程技术问答社区
如何在Spark中使用DataFrame建立一个CoordinateMatrix?
我正在尝试将ALS算法的Spark实现用于推荐系统,因此我构建了下面描述的数据框架,作为培训数据: |--------------|--------------|--------------| | userId | itemId | rating | |--------------|--------------|--------------| 现在,我想创建一个稀疏矩阵,以表示每个用户和每个项目之间的交互.矩阵会很稀疏,因为如果用户和项目之间没有相互作用,则矩阵中的相应值将为零.因此,最终,大多数值将为零. 但是,如何使用坐标膜上才能实现这一目标?我是说CoordinateMatrix,因为我使用Spark 2.1.1,带有Python,在文档中,我看到仅当矩阵的两个尺寸都很大并且矩阵非常稀疏时,才能使用坐标. 换句话说,我如何从此数据框中获得coordinatematrix,行将是用户,列将是项目,评分将是矩阵中的值? 解决方
18 2024-03-01
编程技术问答社区
无法将<class 'pyspark.ml.linalg.SparseVector'>类型转换为Vector
给定我的pyspark行对象: >>> row Row(clicked=0, features=SparseVector(7, {0: 1.0, 3: 1.0, 6: 0.752})) >>> row.clicked 0 >>> row.features SparseVector(7, {0: 1.0, 3: 1.0, 6: 0.752}) >>> type(row.features) 但是,row.features无法通过Isinstance(row.features,vector)测试. >>> isinstance(SparseVector(7, {0: 1.0, 3: 1.0, 6: 0.752}), Vector) True >>> isinstance(row.features, Vector) False >>> isinstance(deepcopy(row.features
Spark DataFrame不尊重模式,将所有东西都视为字符串
我面临的问题已经很久了. 我在Spark 1.4和Scala 2.10上.我目前无法升级(大分布式基础架构) 我有一个具有几百列的文件,其中只有2列,而静止则很长.我想将这些数据转换为标签/功能数据框. 我已经能够将其变成libsvm格式. 我只是无法将其变成标签/功能格式. 原因 我无法使用todf() val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt").toDF() 它不支持1.4 所以我首先将txtfile转换为数据框,在其中使用了类似的东西 def getColumnDType(columnName:String):StructField = { if((columnName== "strcol1") || (columnName== "strcol2")) return StructF