diff --git a/opentelemetry-sdk/src/attributes/set.rs b/opentelemetry-sdk/src/attributes/set.rs
index 644f44e0f5..7775d20692 100644
--- a/opentelemetry-sdk/src/attributes/set.rs
+++ b/opentelemetry-sdk/src/attributes/set.rs
@@ -8,8 +8,6 @@ use std::{
 use opentelemetry::{Array, Key, KeyValue, Value};
 use ordered_float::OrderedFloat;
 
-use crate::Resource;
-
 #[derive(Clone, Debug)]
 struct HashKeyValue(KeyValue);
 
@@ -87,17 +85,6 @@ impl From<&[KeyValue]> for AttributeSet {
     }
 }
 
-impl From<&Resource> for AttributeSet {
-    fn from(values: &Resource) -> Self {
-        let vec = values
-            .iter()
-            .map(|(key, value)| HashKeyValue(KeyValue::new(key.clone(), value.clone())))
-            .collect::<Vec<_>>();
-
-        AttributeSet::new(vec)
-    }
-}
-
 fn calculate_hash(values: &[HashKeyValue]) -> u64 {
     let mut hasher = DefaultHasher::new();
     values.iter().fold(&mut hasher, |mut hasher, item| {
@@ -146,3 +133,52 @@ impl Hash for AttributeSet {
         state.write_u64(self.1)
     }
 }
+
+#[cfg(test)]
+mod tests {
+    use std::hash::DefaultHasher;
+    use std::hash::{Hash, Hasher};
+
+    use crate::attributes::set::HashKeyValue;
+    use opentelemetry::KeyValue;
+
+    #[test]
+    fn equality_kv_float() {
+        let kv1 = HashKeyValue(KeyValue::new("key", 1.0));
+        let kv2 = HashKeyValue(KeyValue::new("key", 1.0));
+        assert_eq!(kv1, kv2);
+
+        let kv1 = HashKeyValue(KeyValue::new("key", 1.0));
+        let kv2 = HashKeyValue(KeyValue::new("key", 1.01));
+        assert_ne!(kv1, kv2);
+
+        let kv1 = HashKeyValue(KeyValue::new("key", std::f64::NAN));
+        let kv2 = HashKeyValue(KeyValue::new("key", std::f64::NAN));
+        assert_eq!(kv1, kv2);
+
+        let kv1 = HashKeyValue(KeyValue::new("key", std::f64::INFINITY));
+        let kv2 = HashKeyValue(KeyValue::new("key", std::f64::INFINITY));
+        assert_eq!(kv1, kv2);
+    }
+
+    #[test]
+    fn hash_kv_float() {
+        let kv1 = HashKeyValue(KeyValue::new("key", 1.0));
+        let kv2 = HashKeyValue(KeyValue::new("key", 1.0));
+        assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
+
+        let kv1 = HashKeyValue(KeyValue::new("key", std::f64::NAN));
+        let kv2 = HashKeyValue(KeyValue::new("key", std::f64::NAN));
+        assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
+
+        let kv1 = HashKeyValue(KeyValue::new("key", std::f64::INFINITY));
+        let kv2 = HashKeyValue(KeyValue::new("key", std::f64::INFINITY));
+        assert_eq!(hash_helper(&kv1), hash_helper(&kv2));
+    }
+
+    fn hash_helper<T: Hash>(item: &T) -> u64 {
+        let mut hasher = DefaultHasher::new();
+        item.hash(&mut hasher);
+        hasher.finish()
+    }
+}
diff --git a/opentelemetry-stdout/src/logs/transform.rs b/opentelemetry-stdout/src/logs/transform.rs
index 7beaa7cc76..b2f5a43a57 100644
--- a/opentelemetry-stdout/src/logs/transform.rs
+++ b/opentelemetry-stdout/src/logs/transform.rs
@@ -1,10 +1,9 @@
 use std::{borrow::Cow, collections::HashMap, time::SystemTime};
 
 use crate::common::{
-    as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, KeyValue, Resource,
-    Scope, Value,
+    as_human_readable, as_opt_human_readable, as_opt_unix_nano, as_unix_nano, AttributeSet,
+    KeyValue, Resource, Scope, Value,
 };
-use opentelemetry_sdk::AttributeSet;
 use serde::Serialize;
 
 /// Transformed logs data that can be serialized.
diff --git a/opentelemetry-stdout/src/trace/transform.rs b/opentelemetry-stdout/src/trace/transform.rs
index 73729606df..66a659de07 100644
--- a/opentelemetry-stdout/src/trace/transform.rs
+++ b/opentelemetry-stdout/src/trace/transform.rs
@@ -1,5 +1,4 @@
-use crate::common::{as_human_readable, as_unix_nano, KeyValue, Resource, Scope};
-use opentelemetry_sdk::AttributeSet;
+use crate::common::{as_human_readable, as_unix_nano, AttributeSet, KeyValue, Resource, Scope};
 use serde::{Serialize, Serializer};
 use std::{borrow::Cow, collections::HashMap, time::SystemTime};