我一直在尝试在 MacOS Sierra 上为 Python 3.6 安装 RPy2,但是 pip 安装失败而没有编译。
安装错误并显示以下消息:
clang: error: unsupported option '-fopenmp'
error: command 'clang' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
任何有关安装的帮助将不胜感激。
我刚刚使用Homebrew将Spark从1.5.2升级到1.6.0并将我的SPARK_HOME环境变量重置为/usr/local/Cellar/apache-spark/1.6.0.现在,在执行pyspark时,它会给出一个权限被拒绝的错误.
如果我进入早期的1.5.2安装目录并从那里执行pyspark,它运行正常.但是从1.6.0安装目录运行pyspark失败,并显示此权限被拒绝错误.
/usr/local/Cellar/apache-spark/1.6.0/bin/load-spark-env.sh: line 2: /usr/local/Cellar/apache-spark/1.6.0/libexec/bin/load-spark-env.sh: Permission denied
/usr/local/Cellar/apache-spark/1.6.0/bin/load-spark-env.sh: line 2: exec: /usr/local/Cellar/apache-spark/1.6.0/libexec/bin/load-spark-env.sh: cannot execute: Undefined error: 0
可能是什么导致了这个?
我正在尝试从压缩成tar的几个json文件创建Spark RDD.例如,我有3个文件
file1.json
file2.json
file3.json
Run Code Online (Sandbox Code Playgroud)
这些都包含在archive.tar.gz.
我想从json文件创建一个数据帧.问题是Spark没有正确读取json文件.使用sqlContext.read.json("archive.tar.gz")或sc.textFile("archive.tar.gz")导致乱码/额外输出创建RDD .
有没有办法处理包含Spark中多个文件的gzip压缩文件?
UPDATE
使用回答中给出的方法从Spark中的压缩读取整个文本文件我能够运行,但这种方法似乎不适合大型tar.gz存档(> 200 mb压缩),因为应用程序扼流圈大型存档大小.由于我正在处理的一些档案在压缩后达到了2 GB的大小,我想知道是否有一些有效的方法来处理这个问题.
我试图避免提取档案然后合并文件,因为这将是耗时的.
我正在尝试从数据库中查询数据,对其进行一些转换,并在hdfs上以镶木地板格式保存新数据.
由于数据库查询返回大量行,因此我将批量获取数据并在每个传入的批处理上运行上述过程.
更新2:批处理逻辑是:
import scala.collection.JavaConverters._
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{StructType, StructField, StringType}
class Batch(rows: List[String],
sqlContext: SQLContext) {
// The actual schema has around 60 fields
val schema = Array("name", "age", "address").map(field =>
StructField(field, StringType, true)
)
val transformedRows = rows.map(rows => {
// transformation logic (returns Array[Array[String]] type)
}).map(row => Row.fromSeq(row.toSeq))
val dataframe = sqlContext.createDataFrame(transformedRows.asJava, schema)
}
val sparkConf = new sparkConf().setAppName("Spark App")
val sparkContext = new SparkContext(sparkConf)
val sqlContext = new SQLContext(sparkContext)
// Code …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种将scala数组转换为包含数组中项目频率的映射的简洁方法.
例如.:
给定一个数组:
val arr = Array("one", "one", "two", "three", "one", "three")
Run Code Online (Sandbox Code Playgroud)
我想要一张地图:
Map("one" -> 3, "two" -> 1, "three" -> 2)
Run Code Online (Sandbox Code Playgroud)
我可以通过写一个函数来做到这一点
import scala.collection.mutable
def counter[T](arr: Array[T]) = {
val temp = mutable.Map[T, Int]()
for (i <- arr) {
if (temp.contains(i)) temp(i) += 1
else temp(i) = 1
}
temp
}
counter(arr)
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可以更有效地完成.