当我尝试将数据帧写入Hive Parket分区表时
df.write.partitionBy("key").mode("append").format("hive").saveAsTable("db.table")
它将在HDFS中创建大量块,每个块只有少量数据。
我了解它是如何进行的,因为每个 spark 子任务将创建一个块,然后将数据写入其中。
我也理解,块数会提高Hadoop的性能,但达到阈值后也会降低性能。
如果我想自动设置数字分区,有人有一个好主意吗?
numPartition = ??? // auto calc basing on df size or something
df.repartition("numPartition").write
.partitionBy("key")
.format("hive")
.saveAsTable("db.table")
默认情况下,火花将为洗牌操作创建200个分区。因此,200个文件/块(如果文件大小较小)将写入HDFS。
使用以下配置,根据Spark中的数据,配置洗牌后要创建的分区数:
spark.conf.set("spark.sql.shuffle.partitions", <Number of paritions>)
例如:spark.conf.set("spark.sql.shuffle.partitions","5")
,所以Spark将创建5个分区,5个文件将写入HDFS。
首先,当您已经在使用< code>partitionBy(key)时,为什么要有一个额外的重新分区步骤呢——您的数据将基于键进行分区。
通常,您可以按列值重新分区,这是一种常见的场景,有助于诸如reduceByKey、基于列值的筛选等操作。例如,
val birthYears = List(
(2000, "name1"),
(2000, "name2"),
(2001, "name3"),
(2000, "name4"),
(2001, "name5")
)
val df = birthYears.toDF("year", "name")
df.repartition($"year")
我正在尝试使用Databricks的spark-csv2.10依赖关系将一个数据帧写入到HDFS的*.csv文件。依赖关系似乎可以正常工作,因为我可以将.csv文件读入数据帧。但是当我执行写操作时,我会得到以下错误。将头写入文件后会出现异常。 当我将查询更改为时,write工作很好。 有谁能帮我一下吗? 编辑:根据Chandan的请求,这里是的结果
在PySpark中或者至少在Scala中,Apache Spark中是否有与Pandas Melt函数等价的函数? 到目前为止,我一直在用Python运行一个示例数据集,现在我想对整个数据集使用Spark。
类似的问题,但没有足够的观点来评论。 根据最新的Spark文档,< code>udf有两种不同的用法,一种用于SQL,另一种用于DataFrame。我找到了许多关于如何在sql中使用< code>udf的例子,但是还没有找到任何关于如何在数据帧中直接使用< code>udf的例子。 o.p.针对上述问题提供的解决方案使用,这是,将根据Spark Java API文档在Spark 2.0中删除。在那
我在Spark 2.1.0/Cassandra 3.10集群(4台机器*12个内核*256个RAM*2个SSD)上工作,很长一段时间以来,我一直在努力使用Spark Cassandra connector 2.0.1向Cassandra写入特定的大数据帧。 这是我的表的模式 用作主键的散列是256位;列表字段包含多达1MB的某种结构化类型的数据。总共,我需要写几亿行。 目前,我正在使用以下写入方法
我想过滤掉具有“c2”列前3个字符的记录,无论是“MSL”还是“HCP”。 所以输出应该如下所示。 有谁能帮忙吗? 我知道df。过滤器($c2.rlike(“MSL”))--用于选择记录,但如何排除记录? 版本:Spark 1.6.2 Scala:2.10
有一个spark_df有许多重复如下: 现在我想将这个spark_df转换如下: 我在熊猫身上知道这一点。但是我正在努力学习火花,这样我就可以把它实施到大数据中。如果有人能帮忙,那就太好了。